package test;
public class QuickSort {
//比较的时候感觉和二叉树有点类似。
public static void quickCore(int[] arr, int low, int hight) {
//判断数组是否查询完毕
if (low >= hight) {
return;
}
//临时数字储存关键字(对比字段)
int temp = arr[low];
//与关键字对比,先从后往前扫描,遇到比关键字小的,就将这次比较的值填充到指针开始的地方
//与关键字对比,从前往后扫描,遇到比关键字大的,就将这次比较的值填充到指针结束的地方
//填坑操作最后一步就是把最初那个临时的数字放进最后一个坑
int i = hight, j = low;
while (i > j) {
while (i > j && arr[i] >= temp) {
i--;
}
if (i > j) {
arr[j] = arr[i];
j++;
}
while (i > j && arr[j] <= temp) {
j++;
}
if (i > j) {
arr[i] = arr[j];
i--;
}
}
arr[i] = temp;
//分而治之(将关键字左边的数组循环快排)
quickCore(arr, low, i - 1);
//分而治之(将关键字右边的数组循环快排)
quickCore(arr, j + 1, hight);
}
// 排序的入口
public static int[] sort(int arr[]) {
int low = 0;
int hight = arr.length - 1;
quickCore(arr, low, hight);
return arr;
}
}
09-16
09-16