编辑代码

#include <stdio.h>

void swap(int* a, int* b) {
    int t = *a;
    *a = *b;
    *b = t;
}

int partition(int arr[], int low, int high) {
    int pivot = arr[low];
    int i = low + 1;

    for (int j = low + 1; j <= high; j++) {
        if (arr[j] > pivot) {
            swap(&arr[i], &arr[j]);
            i++;
        }
    }

    swap(&arr[low], &arr[i - 1]);
    return i - 1;
}

int quickSelect(int arr[], int low, int high, int k) {
    if (low <= high) {
        int pivotIndex = partition(arr, low, high);

        if (pivotIndex == k - 1) {
            return arr[pivotIndex];
        } else if (pivotIndex > k - 1) {
            return quickSelect(arr, low, pivotIndex - 1, k);
        } else {
            return quickSelect(arr, pivotIndex + 1, high, k);
        }
    }

    return -1; // 如果输入 K 不在有效范围内,返回 -1 或其他合适的值
}

int findKthLargest(int arr[], int n, int k) {
    if (k > 0 && k <= n) {
        return quickSelect(arr, 0, n - 1, k);
    }

    return -1; // 如果输入 K 不在有效范围内,返回 -1 或其他合适的值
}

int main() {
    int arr[] = {12, 4, 5, 6, 7, 3, 1, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 3; // 例如,查找第 3 大元素

    int result = findKthLargest(arr, n, k);

    if (result != -1) {
        printf("The %dth largest element is: %d\n", k, result);
    } else {
        printf("Invalid input for K\n");
    }

    return 0;
}