• 输出前m大的数


    题目:

    给定一个无序数组,要求输出其前m大的数

    思路:

    利用快速排序中的划分方法,将前m大的数安排到数组的右边,然后对这m个大的数进行排序,再倒序输出即可

    代码是大一时写的,如果没记错的话是抄自郭炜老师。这次重温复习。

    /*4.3输出前m大的数 
     *以从小到大的顺序输出 
     */
     #include <iostream>
     using namespace std;
     
     void swap(int &a,int &b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }
    
     void arrangeRight(int a[],int s,int n,int k)
     {
          int key = a[s];
          int i = s,j = n;
          while( i != j){
              while( i < j && key <= a[j])     j--;
              swap(a[i],a[j]);
              while( i < j && a[i] <= key)     ++i;
              swap(a[i],a[j]);
          }
         if(n - i + 1 == k) return;
         else if( n - i + 1 > k ) arrangeRight(a,i+1,n,k);
         else if( n - i + 1 < k ) arrangeRight(a,s,i-1,k-n+i-1);
     }
     
     void QSort(int a[], int s,int e) //排序A[s]到A[e];
    {
        if(s >= e)    return;
        int k = a[s];
        int i = s, j = e;
        while( i != j ){
            while( k <= a[j] && i < j)    j--;
            swap(a[i],a[j]);
            while( a[i] <= k && i < j)    i++;
            swap(a[i],a[j]);
        }
        QSort(a,s,i-1);
        QSort(a,i+1,e);
        
    }
     int main()
     {
         int n;
         cin >> n;
         int * a = new int[n];
         for(int i = 0; i < n; ++i )
             cin >>  a[i];
         int k;
         cin >> k;
         arrangeRight(a,0,n-1,k);
         QSort(a,n-k,n-1);
         for(int i = n-1 ; i >= k; --i )
             cout << a[i] << endl;
         delete a;
        return 0;
     }
  • 相关阅读:
    DELPHI开发LINUX包
    DELPHI开发LINUX的动态库
    中间件测试工具
    CENTOS7安装OPENSSL
    咏南跨平台中间件简介
    IdHTTPServer开发https服务器
    ServiceStack.Redis常用操作
    ServiceStack.Redis 之 IRedisTypedClient<第四篇>
    Redis常用命令速查 <第二篇>
    ServiceStack.Redis之IRedisClient<第三篇>
  • 原文地址:https://www.cnblogs.com/seanliao/p/8672874.html
Copyright © 2020-2023  润新知