#include<stdio.h>voidswap(int* a, int* b){
int t = *a;
*a = *b;
*b = t;
}
intpartition(int arr[], int low, int high){
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
intquickSelect(int arr[], int low, int high, int k){
if (k > 0 && k <= high - low + 1) {
int pi = partition(arr, low, high);
if (pi - low == k - 1) {
return arr[pi];
}
if (pi - low > k - 1) {
return quickSelect(arr, low, pi - 1, k);
}
return quickSelect(arr, pi + 1, high, k - pi + low - 1);
}
return-1;
}
intmain(){
int arr[] = {9,4,8,7,5,2,1};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
int result = quickSelect(arr, 0, n - 1, k);
if (result == -1) {
printf("K超出界限\n");
} else {
printf("第%d大的元素为:%d\n", k, result);
}
return0;
}