#include <stdio.h>
int partition(int arr[], int arrStart, int arrEnd) {
int pivotValue = arr[arrEnd - 1];
int pivotIndex = arrStart;
for (int i = arrStart; i < arrEnd - 1; i++) {
if (arr[i] > pivotValue) {
int temp = arr[i];
arr[i] = arr[pivotIndex];
arr[pivotIndex] = temp;
pivotIndex++;
}
}
int temp = arr[pivotIndex];
arr[pivotIndex] = arr[arrEnd - 1];
arr[arrEnd - 1] = temp;
return pivotIndex;
}
int findKthLargest(int arr[], int arrStart, int arrEnd, int k) {
int pos = partition(arr, arrStart, arrEnd);
int rank = pos - arrStart + 1;
if (rank == k) {
return arr[pos];
} else if (rank < k) {
return findKthLargest(arr, pos + 1, arrEnd, k - rank);
} else {
return findKthLargest(arr, arrStart, pos, k);
}
}
int main() {
int arr[] = {3,44,38,5,47,15,36,27,2,46,4,19,50,48};
int n = sizeof(arr) / sizeof(arr[0]);
printf("数组arr:");
for (int i = 0; i < n; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
int k = 2;
int result = findKthLargest(arr, 0, n, k);
printf("第%d大的元素是:%d", k, result);
return 0;
}