编辑代码

#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[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);
}

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;  
}

int findKthLargest(int arr[], int size, int k) {
    return quickSelect(arr, 0, size - 1, k);
}

int main() {
    int arr1[] = { 3, 2, 1, 5, 6, 4 };
    int n1 = sizeof(arr1) / sizeof(arr1[0]);
    int k1 = 1;
    int kthLargest1 = findKthLargest(arr1, n1, k1);
    printf("第 %d大的数是: %d\n", k1, kthLargest1);

    int arr2[] = {8,2,5,23,11,21,7 };
    int n2 = sizeof(arr2) / sizeof(arr2[0]);
    int k2 = 2;
    int kthLargest2 = findKthLargest(arr2, n2, k2);
    printf("第 %d大的数是: %d\n", k2, kthLargest2);

    int arr3[] = { 5,7,1,12,31,11 };
    int n3 = sizeof(arr3) / sizeof(arr3[0]);
    int k3 = 3;
    int kthLargest3 = findKthLargest(arr3, n3, k3);
    printf("第 %d大的数是: %d\n", k3, kthLargest3);
    return 0;
}