package com.asiainfo.test;
import java.util.Arrays;
import sun.misc.Sort;
public class QKSORT {
//基本思路是:选择一个值为key 一般是选择左边第一个为key
//先是从右向左找到小于 key 的值 将此值与 key 进行交换,由于key 是一个标记先不用交换 ;先是将low与high 值交换
//然后是从左向右找到大于key的值 将此值与key 进行交换,由于key 是一个标记先不用交换,先将high 与low 进行交换
public static int getkeyIndex(int []array,int low,int hight){
int key=array[low];
while(hight>low){
while(array[hight]>key&&hight>low){//先是从右向左找到小于 key 的值 将此值与 key 进行交换,由于key 是一个标记先不用交换 ;先是将low与high 值交换
hight--;
}
array[low]=array[hight];
while(array[low]<key&&hight>low){//然后是从左向右找到大于key的值 将此值与key 进行交换,由于key 是一个标记先不用交换,先将high 与low 进行交换
low++;
}
array[hight]=array[low];
}
array[low]=key; 排序的终止条件是左侧指针和右侧指针重合,即low=high
return low;
}
public static void sort(int []array,int low,int hight){
if(hight>low){
int index=getkeyIndex(array, low, hight);// //产生一个序列以后,会出现两个序列,左边全比关键字小,右边全比关键字大
sort(array,low,index-1);//递归,取排列序列的返回值为减去1为high
sort(array,index+1,hight); //递归,取排序序列的返回值加1位low
// //因为index左侧的值都比它小,右侧的值都比他大,所以result的值
}
}
public static void main(String[] args) {
int [] array={7,2,6,8,1,5,3};
sort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
}
参考:https://blog.youkuaiyun.com/qq_34520606/article/details/76038671