#include <bits/stdc++.h>
using namespace std;
int QuickSelect(int arr[], int s, int t, int k){
int i = s, j = t;
if(s < t) {
int temp = arr[s];
while(i != j){
while(i < j && temp <= arr[j])
j--;
arr[i] = arr[j];
while(i < j && temp >= arr[i])
i++;
arr[j] = arr[i];
}
arr[i] = temp;
if(k-1 == i) return arr[i];
else if(k-1 < i) return QuickSelect(arr, s, i - 1, k);
else return QuickSelect(arr, i + 1, t, k);
} else if(s == t && k -1 ==s){
return arr[s];
}
}
int main(){
int a[] = {2, 5, 1, 7, 10, 6, 9, 4, 3, 8};
int n = sizeof(a) /sizeof(a[0]);
for(int k = 1; k <= n; k++)
cout << "第" << k << "小的元素为:" << QuickSelect(a, 0, n -1, k) << endl;
return 0;
}
3.3.3寻找一个序列中第K小的元素
最新推荐文章于 2024-07-12 01:14:45 发布