算法步骤:
1 从数组中挑出一个元素,称为 “基准”(pivot),以下实例取第一位数组元素为基准数
2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
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= baseElement) { --r; } if(l == r) { isSmallest = true; break ; } while(l
调用方法:
public static void main(String[] args) { int[] array = {82 ,31 ,29 ,71, 72, 42, 64, 5, 110}; quickSort(array);}
执行结果:
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]------------------------------------------------
参考页面: