快速排序:从数组中取一个元素作为参考元素a0,然后递归这个过程:≤a0的放在a0的左边,大于等于a0的放在它的右边。
原理就是分治。
代码:
//<=val的放左边,>=val的放右边
int partition(int *a, int size){
int val=a[0], left=0, right=size-1;
while(left<right){
while(left<right && a[right]>=val) right--;
while(left<right && a[left]<=val) left++;
swap(a[left],a[right]); //left<=right
} //找到了参考元位置
swap(a[0],a[left]);
return left;
}
void quickSort(int *a, int size){
if(size<2) return;
int pos = partition(a,size);
quickSort(a, pos);
quickSort(a+pos+1,size-pos-1);
}