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

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

题目描述

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

输入

 多组输入,每组输入格式如下。

第一行包含两个整数n m。(n<=100000, m>0)
第二行包含n个正整数。

输出

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

示例输入

2 1
4 3
4 2
1 2 898989 23

示例输出

4
898989 23
基数排序
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std; const int MAX=110000; int Arr[MAX]; int Getdigit(int x,int d)
{
return (x/d)%10;//计算每位的数字
}
void MSD_sort(int low,int high,int d)
{
int count[10]= {0};
int *b=new int[high-low+1];//为所有桶开辟空间
int sum=1;
for(int k=1;k<=d;k++)
{
memset(count,0,sizeof(count));
for(int i=low;i<=high;i++)
{
count[Getdigit(Arr[i],sum)]++;//统计数据的数量
}
for(int i=1;i<=9;i++)
{
count[i]+=count[i-1];//设置每个桶的右边界索引
}
//讲数据装入桶中
for(int i=high;i>=low;i--)//从右向左,保证数据的稳定性
{
int ans=Getdigit(Arr[i],sum);//计算关键码的数字;
b[count[ans]-1]=Arr[i];//放入对应的桶中,aount[ans]-1为右边界索引
--count[ans];
}
//收集数据
for(int i=low,j=0;i<=high;i++,j++)
{
Arr[i]=b[j];
}
sum*=10;
}
delete b;//删除
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m ))
{
for(int i=0; i<n; i++)
{
scanf("%d",&Arr[i]);
}
if(m>n)
{
cout<<"ERROR"<<endl;
continue;
}
MSD_sort(0,n-1,9);
for(int i=n-1; i>=(n-m); i--)
{
if(i!=n-1)
printf(" ");
printf("%d",Arr[i]);
}
printf("\n");
}
return 0;
} <pre name="code" class="cpp">#include <bits/stdc++.h>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define ClearAll(A,T) memset(A,T,sizeof(A))
/*
手敲快排
*/
using namespace std; const int Max=110000; int Arr[Max]; void Qsort(int low,int high)
{
int i=low,j=high,s=Arr[low];
if(i>=j)
return ;
while(i<j)
{
while(i<j&&Arr[j]<=s)
j--;
Arr[i]=Arr[j];
while(i<j&&Arr[i]>=s)
i++;
Arr[j]=Arr[i];
}
Arr[i]=s;
Qsort(low,i-1);
Qsort(i+1,high);
} int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{ for(int i=0; i<n; i++)
{
scanf("%d",&Arr[i]);
}
if(m>n)
{
printf("ERROR\n");
continue;
}
Qsort(0,n-1);
for(int i=0; i<m; i++)
{
if(i)
printf(" ");
printf("%d",Arr[i]);
}
printf("\n");
} return 0;
}
Sort:
#include <bits/stdc++.h>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define ClearAll(A,T) memset(A,T,sizeof(A)) using namespace std; const int Max=110000; int Arr[Max]; bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{ for(int i=0; i<n; i++)
{
scanf("%d",&Arr[i]);
}
if(m>n)
{
printf("ERROR\n");
continue;
}
sort(Arr,Arr+n,cmp);
for(int i=0; i<m; i++)
{
if(i)
printf(" ");
printf("%d",Arr[i]);
}
printf("\n");
} return 0;
}
归并排序:
#include <bits/stdc++.h>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define ClearAll(A,T) memset(A,T,sizeof(A)) using namespace std; const int Max=110000; int Arr[Max]; int Tarr[Max]; void Merge(int low,int mid,int high)
{
int i=low,j=mid+1,k=0;
while(i<=mid&&j<=high)
{
if(Arr[i]>=Arr[j])
Tarr[k++]=Arr[i++];
else
Tarr[k++]=Arr[j++];
}
while(i<=mid)
{
Tarr[k++]=Arr[i++];
}
while(j<=high)
{
Tarr[k++]=Arr[j++];
}
for(i=0; i<k; i++)
{
Arr[low+i]=Tarr[i];
}
}
void 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(~scanf("%d %d",&n,&m))
{ for(int i=0; i<n; i++)
{
scanf("%d",&Arr[i]);
}
if(m>n)
{
printf("ERROR\n");
continue;
}
Qsort(0,n-1);
for(int i=0; i<m; i++)
{
if(i)
printf(" ");
printf("%d",Arr[i]);
}
printf("\n");
} return 0;
}
/*
先建堆后调整;
*/
#include <bits/stdc++.h>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define ClearAll(A,T) memset(A,T,sizeof(A)) using namespace std; const int Max=110000; int Arr[Max]; void MaxHeap(int i,int n)
{
int j,ans;
ans=Arr[i];
j=2*i+1;
while(j<n)
{
if(j+1<n&&Arr[j+1]<Arr[j])
{
j++;
}
if(Arr[j]>=ans)
{
break;
}
Arr[i]=Arr[j];
i=j;
j=2*i+1;
}
Arr[i]=ans;
}
void MakeMaxHeap(int n)
{
for(int i=n/2-1;i>=0;i--)
{
MaxHeap(i,n);
}
}
void Heap(int n)
{
for(int i=n-1;i>=0;i--)
{
swap(Arr[i],Arr[0]);
MaxHeap(0,i);
}
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%d",&Arr[i]);
}
if(m>n)
{
printf("ERROR\n");
continue;
}
MakeMaxHeap(n);
Heap(n);
for(int i=0;i<m;i++)
{
if(i)
printf(" ");
printf("%d",Arr[i]);
}
printf("\n");
}
return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

排序练习——找出前m大的数字 分类: 排序 2015-06-08 09:33 21人阅读 评论(0) 收藏的更多相关文章

  1. Hdu 1429 胜利大逃亡(续) 分类: Brush Mode 2014-08-07 17:01 92人阅读 评论(0) 收藏

    胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  2. 8大排序算法图文讲解 分类: Brush Mode 2014-08-18 11:49 78人阅读 评论(0) 收藏

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

  3. Hdu1429 胜利大逃亡(续) 2017-01-20 18:33 53人阅读 评论(0) 收藏

    胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  4. SQL string类型的数据按int类型排序 分类: SQL Server 2014-12-08 16:56 393人阅读 评论(0) 收藏

    说明: 我在做wms进销存软件时,发现一个问题:一张入库单(T_OutIn_BoxTop),入库扫描时要分成多箱,箱号(BoxTop_No)可以是数字也可以是字符串,所以箱号只能是字符串类型的,问题来 ...

  5. 合并k个已排序的链表 分类: leetcode 算法 2015-07-09 17:43 3人阅读 评论(0) 收藏

    最先想到的是把两个linked lists 合并成一个. 这样从第一个开始一个一个吞并,直到所有list都被合并. class ListNode:# Definition for singly-lin ...

  6. 8大排序算法图文讲解 分类: B10_计算机基础 2014-08-18 15:36 243人阅读 评论(0) 收藏

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

  7. 各种排序算法的分析及java实现 分类: B10_计算机基础 2015-02-03 20:09 186人阅读 评论(0) 收藏

    转载自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 另可参考:http://gengning938.blog.163.com/blog/sta ...

  8. C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏

    邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...

  9. HDU1253 胜利大逃亡(BFS) 2016-07-24 13:41 67人阅读 评论(0) 收藏

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...

随机推荐

  1. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  2. Leetcode: Word Pattern II

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  3. 背包九讲 附:USACO中的背包问题

    附:USACO中的背包问题 USACO是USA Computing Olympiad的简称,它组织了很多面向全球的计算机竞赛活动. USACO Trainng是一个很适合初学者的题库,我认为它的特色是 ...

  4. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  5. C# Enum Type

    class Program { public enum TimeOfDay { Morining, Afternoon, Evening } static void Main(string[] arg ...

  6. CentOS 5.5 Nginx+JDK+MySQL+Tomcat(jsp)成功安装案例

    在CentOS 5.5中安装Nginx+jdk+mysql+tomcat是非常容易的.只需yum安装环境包和nginx.解压安装jdk和tomcat.配置profile文件.server.xml和ng ...

  7. visio的简单用法

    visio图边缘会自动扩展 将常用工具放到收藏夹中,拖进去就可以用. 基本形状基本能够满足一般的需求. 支持自己定义形状,将定义好的形状右击组合之后,收藏到收藏夹或导出模版. 多用组合,收藏夹,调整图 ...

  8. oracle ebs request一直pending

    如果提交请求以后,状态一直是pending状态,可以在“工具”打开“Manager”,查看一下Maximum是否有设置错,另外pending的数量当前是多少. 如果Maximum是1,pending是 ...

  9. div内的img下出现几像素的空白间距解决办法

    现象描述: 解决方法: 1.设父元素的font-size:0; 2.设img为display:block; 3.设img为vertical-align:middle;

  10. 【python cookbook】【字符串与文本】11.从字符串中去掉不需要的字符

    问题:在字符串的开始.结尾或中间去掉不需要的字符,比如说空格符 解决方案: 1.字符串开始或结尾处去掉字符:str.strip() 2.从左或从右侧开始执行去除字符:str.lstrip().str. ...