- 快排也是采用的分治的思想。
- 首先从数组中挑选一个基准,比基准大的放在基准右边,否则放在基准左边。这样一轮下来,基准的位置就确定了。
- 递归调用,以相同的方法对待得到的两个子数组,直到子数组大小为2。因为数组大小为2时,确定了基准的位置,该数组就是有序的了。
- 我每次以array[low]即数组的首元素作为基准来进行快速排序的。实现代码如下:
//每次都以array[low]为基准,找到该数所在的位置index
public int getIndex(int[] array , int low , int high) {
int tmp = array[low]; //将基准元素暂存
while(low<high) {
while(high>low&&array[high]>tmp) {
high--;
}
array[low] = array[high];
while(high>low&&array[low]<tmp) {
low++;
}
array[high] = array[low];
}
array[low] = tmp;
return low;
}
public void quickSort(int[] array , int low , int high) {
if(low<high) {
int index = getIndex(array,low,high);
quickSort(array,0,index-1);
quickSort(array,index+1,high);
}
}