package V_Recursion;
public class C_QuickSort {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quicSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " , ");
}
}
public static void quicSort(int[] arr, int i, int j) {
//定义两个变量,记录要查找的范围
int start = i;
int end = j;
//递归的出口
if (start>end){
return;
}
//记录基准数
int baseNumber = arr[i];
//利用循环找到要交换的数字
while (start != end) {
//利用end,从后往前找,找比基准数小的数字
while (true) {
//当end和star的指针指向重叠时,或者后指针找到了比基准数小的数时break
if (end <= start || arr[end] < baseNumber) {
break;
}
end--;
}
//利用start,从前往后找,比基准数大的数字
while (true) {
//当end和star的指针指向重叠时,或者前指针找到了比基准数大的数时break
if (end <= start || arr[start] > baseNumber) {
break;
}
start++;
}
//把end和start指向的元素交换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//当start和end指向同一个元素,那么上面的循环就会结束
//表示找到了基准数在数组中因该存在的位置
//基准数归位
//就是拿着这个范围中的第一个数字跟start交换位置
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
//确定6左边的范围重复刚刚所做的事情
quicSort(arr,i,start-1);
//确定6右边的范围重复刚刚的事情
quicSort(arr,start+1,j);
}
}
关于 Java快速查找详细
赖皮真2025-11-06 19:49