三种排序方法
给出n个整数,请按照从大到小的顺序输出其中前m大的数
一. 冒泡排序
#include <iostream>
#include <cstdio>
using namespace std;
int a[10000];
int n,m;
#define swap(a,b){int t=a;a=b;b=t;}
void bsort(){
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(a[i]<a[j])
swap(a[i],a[j]);
}
}
}
int main(){
while(~scanf("%d %d",&n,&m)){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
bsort();
for(int i=0;i<m;i++){
printf(" %d ",a[i]);
}
printf("\n");}
return 0;
}
二、快速排序
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[10000];
int n,m;
int main(){
while(~scanf("%d %d",&n,&m)){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(int i=n-1;i>=n-m;i--){
printf(" %d ",a[i]);
}
printf("\n");}
return 0;
}
三、哈希算法
#include <bits/stdc++.h>
using namespace std;
const int MAX=1000001;
int a[MAX];
int main(){
int n,m;
while(~scanf("%d %d",&n,&m)){
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
int t;
scanf("%d",&t);
a[50000+t]=1;
}
for(int i=MAX-1;m>0;i--){
if(a[i]){
printf(" %d ",i-50000);
m--;
}
}
printf("\n");
}
return 0;
}