题解 | #寻找第K大#

寻找第K大

https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param a int整型一维数组 
 * @param aLen int a数组长度
 * @param n int整型 
 * @param K int整型 
 * @return int整型
 */
 void swap( int* a , int i , int max){
    int t =a[i];
    a[i] = a[max];
    a[max] = t;
 }
void heapify(int* a , int aLen , int i){
    int c1 = 2*i + 1;
    int c2 = 2*i + 2;
    int max = i;
    if(c1 < aLen && a[max] < a[c1]) max = c1;
    if(c2 < aLen && a[max] < a[c2]) max = c2;
    if(max != i){
        swap(a , i , max);
        heapify(a , aLen , max);
    }
 }
 //排序入口
 void heap_sort(int* a , int aLen){
    //建堆
    for(int i = (aLen - 2) / 2 ; i >= 0 ; i--){
        heapify(a , aLen , i);
    }
    //排序
    for(int i = aLen - 1 ; i > 0 ; i--){
        swap(a , i  ,0);
        heapify(a , i , 0);
    }
 }
int findKth(int* a, int aLen, int n, int K ) {
    // write code here
    for(int i = 0 ; i < aLen ; i++){
        printf("%d " , a[i]);
    }
    printf("\n");
    heap_sort(a, aLen);
    return a[n-K];
}

全部评论

相关推荐

12-07 16:16
已编辑
四川大学 Java
点赞 评论 收藏
分享
10-14 10:56
已编辑
长沙学院 嵌入式软件开发
痴心的00后拿到了ssp:hr面挂了,无所谓了反正不去😃
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务