/**
* 找第 k 小的的数
* */
#include<bits/stdc++.h>
using namespace std;
// Partion函数使得a[left]左边的数都小于它,右边的数都大于它
int Partion(int a[], int left, int right) {
int temp = a[left];
while(left < right) { // 只要left和right不相遇
while(left < right && a[right] > temp) {
right --;
}
a[left] = a[right];
while(left < right && a[left] <= temp) {
left ++;
}
a[right] = a[left];
}
a[left] = temp;
return left;
}
int selectNumber(int a[], int left, int right, int k) {
int j = Partion(a, left, right);
if(j == k){
return a[j - 1];
}
else {
return j > k ? selectNumber(a, left, j - 1, k) : selectNumber(a, j + 1, right, k);
}
}
int main() {
int a[9] = {10, 2, 9, 12, 8, 15, 6, 16, 18};
cout << selectNumber(a, 0, 8, 7) << endl;
return 0;
}
找第k小的数
最新推荐文章于 2021-12-25 19:27:55 发布