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=highreturn 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为highsort(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.csdn.net/qq_34520606/article/details/76038671