算法实战java实现快速排序
2017-10-22 16:03
681 查看
快排原理介绍
在数组s中随便选出一数,做为枢纽值x。
s1和s2
大小不必相等。递归的向s1和s2使用上面的方法,结合起来就拍好序了。
注意:
在实际应用中数组的数量小于20,插入排序的速度快与快速排序。java实现
public class QuickSort { private final int CUTOFF = 20; void quicksort( int[] list) { quicksort( list, 0, list.length - 1); } void quicksort( int[] list, int left, int right) { if (left + CUTOFF <= right) { //得到枢纽元 int pivot = median3(list, left, right); int i = left; int j = right-1; for( ; ; ) { //当俩个指针都停下时,进行交换 while ( list[++i] < pivot) {} while ( list[--j] > pivot) {} //检查是否越界 if (i < j) swap(list, i, j); else break; } //将枢纽元放回i所在位置 swap(list, i, right - 1); //递归调用 quicksort( list, left, i - 1); quicksort( list, i+ 1, right); } else inserSort( list, left, right); } //将首尾中3个数进行排序并返回中值 int median3( int[] list, int left, int right) { int center = (left + right ) / 2; //若center值小于left值,二者交换 if (list[center] < list[left]) swap( list, left, center); //若right值小于left值,二者交换 if (list[right] < list[left]) swap( list, left, right); //若right值小于center值,二者交换 if (list[right] < list[center]) swap( list, center, right); //最终结果为left, center,right值从小到大排列 //将中值于倒数第二个值交换 swap( list, center, right-1); //返回中值 return list[ right - 1 ]; } //交换数组中的位置 void swap( int[] list, int left, int right) { int temp = list[left]; list[left] = list[right]; list[right] = temp; } //直接插入排序,由小到大 void inserSort( int[] list, int left, int right) { int j; for( int p = left; p <= right; p++ ) { int temp = list[p]; //比较当前位置与前面一个的大小, 如果当前位置较小与前一个交换。 for ( j = p; j > 0 && temp - list[ j - 1] < 0; j--) list[j] = list[j-1]; list[j] = temp; } } }
相关文章推荐
- 「算法」快速排序 Java 实现
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 排序算法之快速排序、归并排序(java实现)
- 快速排序quicksort-算法导论java实现
- 算法-快速排序-java实现
- Java实现排序算法之快速排序
- 3.快速排序——啊哈算法java实现
- 算法代码实现之三向切分快速排序,Java实现
- 【算法导论】快速排序java实现
- 算法代码实现之快速排序,Java实现
- 算法外功修炼之一 快速排序的Java实现
- 8大内部排序算法学习笔记--(2)快速排序 Java实现
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 快速排序JAVA实现
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排
- java基础知识之 算法 【冒泡排序】【快速排序】
- 【快速排序】算法实现
- 快速排序--Java实现
- 快速排序C语言算法实现
- 用JAVA实现排序算法之一:冒泡排序