zoukankan      html  css  js  c++  java
  • 线性时间内求数组中的 第k小数

    只在快拍的基础上改了一点点 与快速排序算法不同的是,我们关注的并不是元素的左右两边,而仅仅是某一边

    #include<iostream>
    using namespace std;
    int a[100];
    int p(int left,int right)
    {
        int t,temp=a[left];
        while(left<right)
        {
            while(left<right&&a[left]<=temp)
                left++;
            while(left<right&&a[right]>=temp)
                right--;
        }
        return left;
    }
    
    
    int pai(int low,int high,int m)
    {
        int u;
        u=p(low,high);
        if(u==m)
            return a[u];
        else if(u>m)
            return pai(low,u-1,m);
        else return pai(u+1,high,m);
    }
        
    int main()
    {
        int i,j,m,n;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        scanf("%d",&m);         //在数组a中找第 m小的
        int w=pai(0,n-1,m);
        printf("%d",w);
        return 0;
    }
  • 相关阅读:
    butter
    医院设置
    NOIP 2000 进制转换
    图的M 着色问题
    闭合区域面积统计
    字符序列
    装载问题
    n皇后问题
    跳马问题
    数独
  • 原文地址:https://www.cnblogs.com/assult/p/3159820.html
Copyright © 2011-2022 走看看