package com.排序;
import java.util.Arrays;
public class QuickSort20210429 {
/**
* 使用 数据中的最高位的 数据作为中间数 然后进行快速排序
* @param list
* @param low
* @param high
* @return
*/
public static int substring(int[] list,int low,int high){
//定义左边的起始 下标
int n = low-1;
//定义右边的起始 下标
int m = high;
// 最高位 作为中间值进行声明
int center = list[high];
//开始一个 循环
while(true){
// n坐标 < m坐标 循环寻找 从前往后 大于中间数的值的坐标
while (list[++n]<center && n<m){}
// n坐标 < m坐标 循环寻找 从后往前 小于中间数的值的坐标
while (list[--m]>center && n<m){}
if(n<m){
//找到了 这俩个数之后 开始交换位置。
swap( list , n, m);
}else {
//一直找不到 直到 n>m 结束循环
break;
}
}
// 把这个 中位数 放到 坐标交汇的地方
swap( list , n, high);
//返回当前 快排的 切分数据的中位数的下标
return n;
}
//排序方法 递归模型
public static void sort(int[] list,int low,int high){
if(low<high){
// 首先进行一个分片 找到一个中间值
int temp = substring(list,low,high);
//找到中间值之后 左边的排序 右边的排序 递归下来就是最后完成排序的数据
sort(list,low,temp-1);
sort(list,temp+1,high);
}
}
/**
* 位置交换
* @param list
* @param indexA
* @param indexB
*/
private static void swap(int[] list ,int indexA,int indexB){
// a b 互换 需要 temp临时存放一下 然后交换
int temp = list[indexA];
list[indexA]= list[indexB];
list[indexB]=temp;
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
sort(arr, 0, arr.length-1);
Arrays.stream(arr).forEach(one->{
System.out.print(one + " ");
});
}
}