快速排序
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
快速排序使用分治法把一个数组,分为两个子数组,该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
public static int[] quick_sort2(int[] array, int start, int end) {
if (start < end) {
// 基准数
int low = start, high = end, mid = array[start];
while (low < high) {
/***
* 从右向左查找:
* 找到第一个小于或等于基准数的位置。进行数组中值的互换
* low < high && array[high] >= mid
* array[high] >= mid 当这个建不成立时,就是找到了比基准数小的数
* 然后把对应位置的数和左边第一位进行互换
* array[low++] = array[high];
*/
while (low < high && array[high] >= mid) {
high--;
}
if (low < high) {
array[low++] = array[high];
}
/***
* 从左向右查找:
* 因为数组中第一个数已经标记为基准数,所以从第二个数开始查找。
* 找到第一个不小于基准数的位置,进行数组中的值互换
* array[low] <= mid:当这个条件不成立时,就是左边数停止增加的时候,
* 然后对指定位置上的值进行操作互换
* array[high--] = array[low];
*/
while (low < high && array[low] <= mid) {
low++;
}
if (low < high) {
array[high--] = array[low];
}
}
array[low] = mid;
//使用递归
quick_sort2(array, start, end - 1);
quick_sort2(array, start + 1, end);
}
return array;
}