今天不讲题目,直接给大家介绍一个听起来就很高大上的算法:哈希排序。
哈希排序是一种排序算法,方法是运用一个数组来记录需要排序的数中某个数是否出现过,也就是将该组数和数组的下标进行对应,从而实现排序。
听起来很麻烦是不是?话不多说,我们直接上代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000001;
int a[MAXN]; //数组a用来记录某个数是否出现过
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){//输入n个数,输出从大到小的m个数(有多组数)
memset(a,0,sizeof(a)); //数组充置为0
for(int i=0;i<n;i++){
int t;
scanf("%d",&t);
a[t]=1; //某个数出现过就把相应的数标记为1
}
for(int i=MAXN;m>0;i--){ //查找最大的m个数,从后往前找
if(a[i]){ //代表i这个数出现过
if(m>1)
{printf("%d",i);}
else //m=1时换行,要输出下一组
{printf("%d\n",i);}
m--;
}
}
}
return 0;
}
(使用语言:c++)
通过上述代码,我们就可以实现将输入的数变为从大到小的多组数并输出了。
代码编写:刘泽溪
原理解释:孔浙凭
排版:徐庆尧