public class myQuickSort {
public static void main(String[] args) {
int[] arr ={12,5,72,47,82,21,9};
quickSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
public static void quickSort(int[] arr){
sort(arr,0,arr.length-1);
}
public static void sort(int[] arr, int low, int high){
if(low < high) {
int partition = partition(arr, low, high);
//对前半部分排序
sort(arr, low, partition-1);
//对后半部分排序
sort(arr, partition+1, high);
}
}
public static int partition(int[] arr, int low, int high){
int start = low;
int pivot = arr[start];
while(low < high){
//先从high指针开始,向前遍历,直到遇到小于pivot的
while(arr[high] >= pivot && low < high)
high--;
//找到一个小于pivot的数,就把high指针位置的值赋给low指针所指位置,再从low指针开始,向后遍历
arr[low] = arr[high];
//从low指针开始,向后遍历,直到遇到大于pivot的
while(arr[low] <= pivot && low < high)
low++;
//找到一个大于pivot的数,就把low指针位置的值赋给high指针所指位置
arr[high] = arr[low];
}
//最后两个指针相遇,pivot的值赋给该位置,返回该位置
arr[low] = pivot;
return low;
}
}
10-05
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)