编辑代码

#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[] = {64, 25, 12, 22, 11}; 
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("数组:");
    for (int i = 0; i < n; ++i) {
        printf("%d ", arr[i]);
    }
    int k = 2; // 要找的第 k 大的元素
    int result = findKthLargest(arr, 0, n, k);
    printf("第 %d 大的元素是:%d", k, result);
    return 0;
}