#include <iostream>
using namespace std;
void printArray(int *arr, int size)
{
for(int i=0; i<size; ++i)
{
cout<< arr[i]<< ' ';
}
cout<<endl;
}
int partition(int array[], int high, int low)
{
int pivot = array[high];
while (low < high) {
while (low < high && array[low] <= pivot ) {
low++;
}
array[high] = array[low];
// printArray(array, 7);
while (low < high && array[high] >= pivot ) {
high--;
}
array[low] = array[high];
// printArray(array, 7);
}
array[low] = pivot;
// cout<<"pos:"<<low<<endl;
return low;
}
int selectK(int array[], int high, int low, int K)
{
int pos = partition(array, high, low);
if (K == pos - low + 1)
{
return array[pos];
}else if(K > pos - low + 1)
{
return selectK(array, high, pos+1, K-(pos-low+1));
}else{
return selectK(array, pos-1, low, K);
}
}
int main()
{
int array[7] = {10, -22, 211, 120, -2, 23, 120};
int size = sizeof (array) / sizeof (*array);
printArray(array, size);
cout<<"number:"<<selectK(array, size-1, 0, 4)<<endl;
return 0;
}
备份地址: 【取出无序数组第K大个数(借助快速排序一次划分)】