/**
* @Description 简单的快速排序
* @auther Eleven
* @create 2020-04-04 20:46
**/
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[]{8,9,5,2,6,7,10,11};
System.out.println(Arrays.toString(arr));
QuickSort quickSort = new QuickSort();
quickSort.quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
/**
* 快速排序
* @param arr 集合
* @param start 开始位置的索引
* @param end 结束位置的索引
*/
public void quickSort(int[] arr,int start,int end){
//递归结束的标记
if(start>=end){
return;
}
//定义集合中的一个数作为标准,这里我们取第一个数
int flag = arr[start];
//记录开始结束位置的索引
int low = start;
int high = end;
//循环查找比标准数大和比标准数小的数字
while (low<high){
//右边的数组比标准数大
while (arr[high]>=flag && low<high){
high--;
}
//第一轮时,这个low索引的数据就是上面的那个flag,将右边比flag小的数据移到原先flag的位置
arr[low] = arr[high];
//这个时候high索引位置的数据已经给到low索引位置了,high索引位置可以放其他数据
//处理左边比flag小的数据
while (arr[low]<=flag && low<high){
low++;
}
//将查出来比flag大的数据给到索引high的位置
arr[high] = arr[low];
}
//到这里的时候说明 high的索引和low索引相等了,这个时候将flag给到high或low索引所在的位置,
arr[low] = flag;
//再比较左侧比flag小的数组,这个时候结束位置就变成high或low
quickSort(arr,start,low);
//再比较右侧比flag大的数组,这个时候起始位置就变成high或low+1
quickSort(arr,low+1,end);
}
}
简单的快速排序
最新推荐文章于 2024-09-11 20:39:26 发布