zoukankan      html  css  js  c++  java
  • 输出前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;
     }
  • 相关阅读:
    Seminar Schedule
    数学建模之Python操作csv文件
    Pandas之csv文件对列行的相关操作
    Python之文件读写(csv文件,CSV库,Pandas库)
    PATA1028 List Sorting
    19.8.9(全局变量和局部变量的作用域)
    PATA1012The Best Rank(25分)
    DEV-gridview导出Excel
    WPF文本换行
    下拉框--可多选
  • 原文地址:https://www.cnblogs.com/seanliao/p/8672874.html
Copyright © 2011-2022 走看看