排序练习(归并排序)

来源:互联网 发布:lte网络优化工作怎么样 编辑:程序博客网 时间:2024/06/05 02:56

排序练习——找出前m大的数字

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定n个数字,找出前m大的数字。
 

输入

 多组输入,每组输入格式如下。
第一行包含两个整数n m。(n<=100000, m>0)
第二行包含n个正整数。

输出

 输出前m大的数字,若m>n输出ERROR。每组输出占一行。

示例输入

2 14 34 21 2 898989 23

示例输出

4898989 23

提示

 
#include<bits/stdc++.h>   //类似链表的有序归并using namespace std;int a[1000001];int Tarr[1000001];int Merge(int low,int mid,int high){int i=low,j=mid+1;   //j以mid+1开始int k=0;while(i<=mid&&j<=high){if(a[i]>=a[j])Tarr[k++]=a[i++];elseTarr[k++]=a[j++];}while(i<=mid){Tarr[k++]=a[i++];}while(j<=high){Tarr[k++]=a[j++];}for(int i=0;i<k;i++){a[low+i]=Tarr[i];}}int Qsort(int low,int high){if(low<high){int mid=(low+high)/2;Qsort(low,mid);Qsort(mid+1,high);Merge(low,mid,high);}}int main(){int n,m;while(cin>>n>>m){for(int i=0;i<n;i++){cin>>a[i];}if(m>n){printf("ERROR\n");}else{Qsort(0,n-1);for(int i=0;i<m;i++){if(i)cout<<" ";cout<<a[i];}cout<<endl;}}}

0 0
原创粉丝点击