快速排序
1.理解
简单来说,快速排序就是在序列中找一个点作为轴点(pivot),使用左右两个指针分别从两头找数字,左指针找比pivot对应值大的数,放在其右边,右边找比pivot对应值小的数,放在其左边,然后把pivot两边的子列再进行快速排序,依次递归实现排序
2.基准(pivot)选择
如果选择最左边为轴点,那么就要从右指针(p_right)开始动,反之亦然
3.图解
4.代码
public void quickSort(int[] list,int left,int right){
if(left >= right){
return;
}else{
int pivot = left;//选择左边的第一个数做轴点,要从右边开始找,反之亦然
int pl = left;
int pr = right;
int temp = 0;
while(pl < pr){
//从右往左找一个比pivot对应的值更小的数
while(pr-pl>0){
if(list[pr]<list[pivot]){
temp = list[pr];
list[pr] = list[pivot];
list[pivot] = temp;
pivot = pr;
break;
}else
pr--;
}
//从左往右找一个比pivot对应的值更大的数
while(pl-pr<0){
if(list[pl]>list[pivot]){
temp = list[pl];
list[pl] = list[pivot];
list[pivot] = temp;
pivot = pl;
break;
}else
pl++;
}
}
//左半边
quickSort(list, left, pivot-1);
//右半边
quickSort(list, pivot+1, right);
}
}