快排的核心思想就是选取基准(哨兵)元素,通常选第一个。然后通过一趟排序将待排序的记录分割成独立的俩部分,其中一部分记录元素值均比基准元素值小,另一部分记录元素的值均大于基准元素值,此时基准元素在其排好序后的正确位置。
private static void quickSort(int[] unsorted, int left, int right) { if (left < right) { int pivot_pos = partition(unsorted, left, right); quickSort(unsorted, left, pivot_pos - 1); quickSort(unsorted, pivot_pos + 1, right); } } /* * partition方法用来把数组分开,返回已排序的那个主元的位置。然后对左边和右边分别进行快速排序。 */ private static int partition(int[] a, int low, int high) { int pivot = a[low]; while (low < high) { while (low < high && a[high] >= pivot) high--; a[low] = a[high];//将小于主元的放在前面 while (low < high && a[low] <= pivot) low++; a[high] = a[low];//将大于主元的放在后面 } a[low] = pivot;// 将主元放在正确的位置 return low;// 根据该位置分为前后两部分分别进行快排 }