排序的三种方法

三种排序方法
给出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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值