package com.example.demo;
/**
* 快排:{4,3,5,2,6,9,8,1,7}
* 1.以数组第一个数为标杆temp,一定要先从后往前比,整两个循环,
* 一个循环(j)从右往左循环,arr[j]<temp,就arr[i]=arr[j],跳出循环,进行从另一边循环
* 循环(i)从左往右与标杆比较,如果arr[i]>temp,就扔个给右边arr[j]=arr[i],跳出左边循环,
* 2.把左右循环放到一个大的循环里,条件是开始位置小于结束位置,返回标杆最后位置索引
* 3.调用大循环的方法,得到标杆索引后,以标杆分开左右数组,进行递归。
*/
public class QSort {
public static void main(String[] args) {
int[] arr = {4,3,5,2,6,9,8,1,7};
sort(arr,0,arr.length-1);
for (int a:arr
) {
System.out.println(a);
}
}
public static void sort(int[] arr,int s,int e){
if(s<e){
int index = sortArray(arr,s,e);//获取第一次排序完后标杆索引位置
sort(arr,s,index-1);//递归排序标杆左边位置
sort(arr,index+1,e);//递归排序标杆右边位置
}
}
/**
*
* @param arr 待排序数组
* @param s 开始位置
* @param e 结束位置
* @return
*/
public static int sortArray(int[] arr,int s,int e){
int temp = arr[s];
int i = s;
int j = e;
while (i<j){
while (i<j){
if(arr[j]<=temp){
arr[i] = arr[j];
break;
}
j--;
}
while (i<j){
if (arr[i]>temp){
arr[j] = arr[i];
break;
}
i++;
}
}
arr[i] = temp;
return i;
}
}
快排
最新推荐文章于 2024-07-26 12:28:02 发布