public static void main(String[] args) {
int[] arr = {99,98,97,96,95,94,93,92,91,90};
System.out.println("排序前:"+Arrays.toString(arr));
quickSort(0,arr.length-1,arr);
System.out.println("排序后:"+Arrays.toString(arr));
}
/**
* 快排
* 1、先设定一个分界值,通过分界值将数组分成两部分
* 2、大于或等于设定值的放数组右边 ,小于设定值的放数组左边
* 3、有序排成两部分,中间一个数前面的比它大,后面的比它小
* 4、然后左右两边可以独立排序,左侧的数组和右侧的数组继续做类似处理
* 5、重复过程就是递归
* @param begin 开始位置
* @param end 结束位置
* @param arr 需要排序的数组
*/
public static void quickSort(int begin,int end ,int[] arr){
int mid = (begin+end) / 2;
int i = begin;
int j = end;
System.out.println("--------------------------");
System.out.println("排序前 i:"+i+"\tj:"+j);
int temp;
if(i == j){
return;
}
while (i < j) {
while(arr[i] < arr[mid]){
i++;
}
while(arr[j] > arr[mid]){
j--;
}
if (arr[i] > arr[mid] || arr[j] < arr[mid]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
System.out.println("最终 i:"+i+"\tj:"+j);
System.out.println("交换数:"+Arrays.toString(arr));
}
}
System.out.println("中间数:"+arr[mid]);
System.out.println("排完一轮:"+Arrays.toString(arr));
// 递归循环进行
quickSort(begin,mid,arr);
quickSort(mid+1,end,arr);
}
数据结构-快速排序
最新推荐文章于 2024-07-20 11:22:21 发布