zoukankan      html  css  js  c++  java
  • 第k大的数

    排序的方法就不说了

    这里记录一下o(n)复杂度的算法

    思想,利用快速排序的划分思想,每一次划分会有一个元素处于最终位置

    判断这个位置,若所处位置大于k,则向左边寻找

    若所处位置大于k,向右边寻找。

    int find_K(int a[],int left, int right,int K)
    {
        if(left==right)
            return a[left];
        if(left<right)
        {
            int pos = middle_partition(a,left,right);
            if(pos+1==K)
                return a[pos];
            else if(pos+1<K){
                return find_K(a,pos+1,right,K);
            }else{
                return find_K(a,left,pos-1,K);
            }
        }
    }

    所用到的划分算法为

    int middle_partition(int A[],int left,int right)
    {
        int middle = A[left];
        while(left<right)
        {
            while(left<right&&A[right]>=middle) right--;
            A[left]=A[right];
            while(left<right&&A[left]<=middle) left++;
            A[right]=A[left];
        }
        A[left]=middle;
        return left;
    }
  • 相关阅读:
    import()函数
    node-sass安装报错
    npm 安装扩展模块时,因缓存报错的问题汇总
    测试
    export default 和 export 区别
    正则
    物联网
    第十二次课堂总结
    第十二次作业
    作业10
  • 原文地址:https://www.cnblogs.com/lxzbky/p/12493706.html
Copyright © 2011-2022 走看看