public class QuickSort {
public static int[] sort(int[] targe, int low, int high) {
if (low >= high)
return targe; // 递归出口
int l = low;// 本次排序的起始点位置
int h = high; // 本次排序的结束位置
int key = targe[l];// 本次排序的基准 ,大于key的放key右边,小于key的方key左边
while (l < h) {// 不是递归出口,而是本次循环结束的条件
while (l < h && targe[h] > key) {
h--; // 从后往前找小于key的数,while结束时h指向小于key的数的下标
}
if (l < h)
targe[l++] = targe[h];// 把h指向的数放到l位置(l的值已经被提前保存在key中),
while (l < h && targe[l] < key) {// 因为l需要前进一步,所以要加判断条件
l++;// 从前往后找大于key的值while结束后l指向大于key的数
}
if (l < h)
targe[h--] = targe[l];// 将l所指的数放入h为,(h的值已经被提前保存在l中)
// 因为h需要后退一步,所以要加判断条件
}
targe[l] = key; // 最后把第一步保存的key放入l位置
sort(targe, low, l - 1);// 对key左边部分排序
sort(targe, l + 1, high);// 对key右边部分排序
return targe;
}
public static void main(String[] args) {
int[] a = { 6, 4, 9, 1, 4, 3, 2, 6, 7 };
for (int i : QuickSort.sort(a, 0, a.length - 1)) {
System.out.print("\t" + i);
}
}
}

被折叠的 条评论
为什么被折叠?



