public static void main(String[] args) {
// 测试排序
Random r = new Random();
int arr[] = new int[10];
for(int i=0;i<10;i++) {
arr[i] = r.nextInt(100);
}
System.out.println("before sort");
for(int i:arr) {
System.out.print(i+",");
}
fastSort(arr, 0, arr.length-1);
System.out.println("after sort");
for(int i:arr) {
System.out.print(i+",");
}
}
public static void fastSort(int[] arr, int left, int right) {
/**
* i 从左侧查找时的索引
* j 从右侧查找时的索引
* tmp 交换数据时,临时变量
* baseVal 交换比较的基准值
*/
int i, j, tmp, baseVal;
if (left > right) {
return;
}
baseVal = arr[left];
i = left;
j = right;
while (i != j) {
// i和j不相同,则进行下面的操作
// 要先从右向左找
while (arr[j] >= baseVal && i < j) {
// 直到找到比baseVal大的值为止
j--;
}
// 再从左向右找
while (arr[i] <= baseVal && i < j) {
// 直到找到比baseVal小的值为止
i++;
}
// 交换两个数在数组中的位置
if (i < j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
// 最终将基准归为
arr[left] = arr[i];
arr[i] = baseVal;
// 递归获取左侧和右侧各排序结果
fastSort(arr, left, i - 1);
fastSort(arr, i + 1, right);
}
原文:https://www.cnblogs.com/qq931399960/p/9550026.html