zoukankan      html  css  js  c++  java
  • 快速选择问题

    输入n个整数和一个正整数k(1<=k<=n),输出这k[n]。

    快速排序

    将序列分成两部分,大于tmp小于tmp

    分别对两部分进行排序

    不要合并

    void QuickSort(RecType R[],int s,int t,int k)
    {
        int i=s,j=t;
        RecType tmp;
        if(s<t)
        {
            tmp=R[s];
            while(i!=j)
            {
                while(j>i&&R[j].key>=tmp.key)
                    j--;
                R[i]=R[j];
                while(i<j&&R[i].key<=tmp.key)
                    i++;
                R[j]=R[i];
            }
            R[i]=tmp;
            QuickSort(R,i+1,t,k);
            QuickSort(R,s,i-1,k);
        }
    }
    //代码来自数据结构-李春葆

    O(n)的时间内将k[n]找出来

    #include<iostream>
    using namespace std;
    struct RecType
    {
        int key;
    };
    int rk;
    void QuickSort(RecType R[],int s,int t,int k)
    {
        int i=s,j=t;
        RecType tmp;
        if(s<t)
        {
            tmp=R[s];
            while(i!=j)
            {
                while(j>i&&R[j].key>=tmp.key)
                    j--;
                R[i]=R[j];
                while(i<j&&R[i].key<=tmp.key)
                    i++;
                R[j]=R[i];
            }
            R[i]=tmp;
            if(k>i)
                QuickSort(R,i+1,t,k);
            else if(k<i)
                QuickSort(R,s,i-1,k);
            else
                rk=R[k].key;
        }
        rk=R[k].key;
    }
    int main()
    {
        int s=1,t,k;
        RecType r[100];
        cin>>t>>k;
        for(int i=1;i<=t;i++)
            cin>>r[i].key;
        QuickSort(r,s,t,k);
        cout<<rk<<endl;
    }
    
  • 相关阅读:
    第一阶段站立会议7
    人机交互—对win10自带输入法的评价
    个人工作总结15
    构建之法阅读笔记06
    个人工作总结14
    第十三周工作总结
    个人工作总结13
    《梦断代码》阅读笔记02
    个人工作总结12
    小水王
  • 原文地址:https://www.cnblogs.com/ke-yi-/p/10175819.html
Copyright © 2011-2022 走看看