编辑代码

#include <stdio.h>
#include <math.h>

// 查找第几大函数
int findKthLargest(int arr[], int low, int high, int K) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high);
        int p = pivotIndex - low + 1;

        if (p == K) {
            return arr[pivotIndex];
        } else if (p < K) {
            return findKthLargest(arr, pivotIndex + 1, high, K - p);
        } else {
            return findKthLargest(arr, low, pivotIndex - 1, K);
        }
    }
    return arr[low];
}

//  快速排序

void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ",array[i]);
    }
}

void printArray1(int array[], int arrStart, int arrEnd) {
    for (int i = arrStart; i < arrEnd; ++i) {
        printf("%d ",array[i]);
    }
    printf("\n");
}

int findMark(int array[],int arrStart,int arrEnd){
    int p =  arrEnd - 1;
            
    return p;
}

int partition(int array[],int arrStart,int arrEnd,int mark){
    int arrayLen = arrEnd - arrStart;

    if(arrayLen < 1 || mark <arrStart || mark >= arrEnd){
        return -1;
    }

    int markValue = array[mark];
    array[mark] = array[arrEnd - 1];

    int j = 0;

    for(int i = arrStart;i<arrEnd-1;++i){
        if(array[i]<=markValue){
            int temp = array[arrStart+j];
            array[arrStart+j] = array[i];
            array[i] = temp;
            ++j;
        }
    }

    array[arrEnd - 1] = array[arrStart + j];
    array[arrStart+j]=markValue;

    return arrStart+j;
}

_Bool quickSort(int array[],int arrStart,int arrEnd){
    int arrLen = arrEnd - arrStart;

    if(arrLen < 0){
        return 0;
    }
    if(arrLen == 1 || arrLen == 0){
        return 1;
    }

    int mark = findMark(array,arrStart,arrEnd);

    int orderedMark = partition(array,arrStart,arrEnd,mark);
    printArray1(array, arrStart, orderedMark);
    printArray1(array, orderedMark, arrEnd);
    quickSort(array,arrStart,orderedMark);

    quickSort(array,orderedMark,arrEnd);

    return 1;
}





int main () {
    int array0[] = {};
    int arrayLen = sizeof(array0)/sizeof(int);
       
    int array1[] = {9, 12, 8, 7, 3};
    arrayLen = sizeof(array1)/sizeof(int);
    printf("排序前:");
    printArray(array1, arrayLen);
    printf("\n=======快速排序过程================");
    quickSort(array1, 0, arrayLen);
    printf("============END================\n");
    printf("排序后:");
    printArray(array1, arrayLen);
    printf("\n====================================");
   //设置查找第几小的值
    int K = 3;
    int result = findKthLargest(array1, 0,  arrayLen  - 1, K);
    printf("\n第%d小的元素是:   %d", K, result);

    return 0 ;

}