快速排序和第K个数
void quickSort(int arr[], int begin, int end){
if(begin >= end){
return;
}
int pivot = arr[(begin+end)>>1];
int i=begin-1, j=end+1;
//before each loop,make sure: arr[i]<pivot,arr[j]>pivot
//that is: each arr[elem] is at the right place.
//after each swap: retain condition.
while(i<j){
//before each loop, arr[i]<pivot is ok, so use do-while.
do{
++i;
}while(arr[i]<pivot);
//when i==j, arr[i]==arr[j]>=pivot, so do-while is over.
do{
--j;
}while(arr[j]>pivot);
//so i==j is impossible
if(i<j){
std::swap(arr[i], arr[j]);
}
}
quickSort(arr, begin, j);
quickSort(arr, j+1, end);
}
使用快速排序(分治算法)求解第K个数,只要对begin<=K<=end的区间进行递归排序即可。