一、思想
1、每次选择待排序数据的第一个元素作为参照物,小的放其前面,大的放其后面
2、一共需要两部分:
(1)函数1:
找到参照物在一次循环比较之后处于该序列的位置,即参照物当前位置和序列中哪个位置交换
(2)函数2:
递归快速排序
二、代码
1、递归快速排序
public static void quickSort(int[] a, int start,int end){
if(start>=end)
return; //递归结束条件:前后指针相遇
int keyIndex=getIndex(a,start,end); //获得参照物排序后的位置
quickSort(a,start,keyIndex-1); // 《key部分按照快速排序的方式递归排序
quickSort(a,keyIndex+1,end); // >key部分
}
2、核心排序部分:找到参照物key排序后的位置
public static int getIndex(int[] a,int start,int end){
int key =a[start];// 第一个数作为参照物
int left=start;
int right=end;
while(left!=right){
// 无需交换
while(left<right&&a[right]>key) right--;
while(left<right&&a[left]<=key) left++;
//当不满足上面无需交换的条件,则在满足基本条件情况下进行交换
if(left<right){
int temp=a[left];
a[left]=a[right];
a[right]=temp;
}
}
//跳出排序循环后的处理:将 key换到left和right相撞的位置
a[start]=a[left];
a[right]=key;
return left;
}