算法步骤:java
1 从数组中挑出一个元素,称为 “基准”(pivot),如下实例取第一位数组元素为基准数算法
2 从新排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(相同的数能够到任一边)。在这个分区退出以后,该基准就处于数列的中间位置。这个称为分区(partition)操做。数组
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。ui
public static void quickSort(int[] elements) { System.out.println("elements="+Arrays.toString(elements)); System.out.println("------------------------------------------------"); split(elements, 0, elements.length-1); } private static void split(int[] elements, int left, int right) { int baseElement = elements[left];// 基准数 int l = left;// 记录左边的指针位置 int r = right;// 记录右边的指针位置 int temp = 0; boolean isSmallest = false;// 基准数是数组指定区域内最小的元素标志 while(l != r) { while(l<r && elements[r] >= baseElement) { --r; } if(l == r) { isSmallest = true; break ; } while(l<r && elements[l] <= baseElement) { ++l; } if(l == r) { temp = elements[r]; elements[r] = baseElement; elements[left] = temp; split(elements, left, r-1); split(elements, l+1, right); } else { temp = elements[l]; elements[l] = elements[r]; elements[r] = temp; } } if(isSmallest) { split(elements, left+1, right); } System.out.println("elements="+Arrays.toString(elements)); System.out.println("------------------------------------------------"); }
调用方法:指针
public static void main(String[] args) { int[] array = {82 ,31 ,29 ,71, 72, 42, 64, 5, 110}; quickSort(array); }
执行结果:code
elements=[82, 31, 29, 71, 72, 42, 64, 5, 110] ------------------------------------------------ elements=[5, 29, 31, 71, 72, 42, 64, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------
参考页面:htm