#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 (low == high) {
return arr[low];
}
int pi = partition(arr, low, high);
if (pi == k - 1) {
return arr[pi];
} elseif (pi < k - 1) {
return quickSelect(arr, pi + 1, high, k);
} else {
return quickSelect(arr, low, pi - 1, k);
}
}
intmain(){
int arr[] = {11,8,3,9,7,1,2,5};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 4; // 要查找第4大的元素 int result = quickSelect(arr, 0, n - 1, k);
printf("第%d大的元素是:%d\n", k, result);
return0;
}