思想:快排

因为单趟排序是使选定的king值到其应该到的位置,所以每次判断这个king的正确位置是否是第K大数的位置即可

#include 
using namespace std;//快排中的单趟排序int PartSort(int* arr,int start,int end){ int first = start; int last = end; int tmp = arr[first]; int key = first; while (first < last){ while (first
=tmp){ --last; } if (first < last){ arr[first] = arr[last]; key = last; } while (first < last&& arr[first] <= tmp){ ++first; } if (first < last){ arr[last] = arr[first]; key = first; } arr[first] = tmp; } return key;}//循环判断是否找到了第K大数对应的下标位置int quickly(int* arr,int start,int end,int k,int size){ int ret=PartSort(arr, start, end); while (ret != size-k){ if (ret > size-k){ end = ret - 1; ret = PartSort(arr, start,end); } else{ start = ret + 1; ret = PartSort(arr,ret+1,end); } } return arr[ret];}int kNumOfArr(int* arr,int size,int k){        //判断参数有效性 if (arr == NULL || size <= 0 || k <= 0 || k > size) return -1; return  quickly(arr, 0, size - 1, k, size);}int main(){ int arr[] = { 5, 8, 100, 6, 7, 1, 6, 0 }; for (int k = 1; k <= 8; ++k){ int ret = kNumOfArr(arr, sizeof(arr) / sizeof(arr[0]), k); cout << ret << endl; } system("pause"); return 0;}

《完》