今天,我们主要来讲讲排序算法。
话不多说,咱们开始
咱们今天就只讲一个例题。
题目
输入 n 个正整数,请将这些数据从大到小输出,中间以空格分隔。
输入
第一行一个正整数 n,表示接下来有 n 个数。
第二行 n 个正整数,为需要处理的数。
输出
将输入的 n 个数从大到小输出,中间以空格分隔。
样例
输入
5 3 17 8 2 5
输出
17 8 5 3 2
提示
数据范围: 输入所有数据均在范围 [1,1000] 内。
1.冒泡排序
#include<iostream>
using namespace std;
int n,a[1001]={10000};
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];//输入
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n-i+1;j++){
if(a[j-1]<a[j]){
int temp;
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;//交换,当然,也可以用swap
}
}
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";//输出
return 0;
}
冒泡排序比较简单,但n越来越大,就容易超时。
2.桶排序
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10001];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>m;//输入
a[m]++;//装进一个桶里,注意,这里不能去重。
}
for(int i=1001;i>=0;i--){
if(a[i]>=1){
for(int j=1;j<=a[i];j++){
cout<<i<<" ";
}
}//特判,输出
}
return 0;
}
桶排序虽然代码比较少,但耗时,耗空间
3.选择排序(插入排序)
#include<iostream>
using namespace std;
int main(){
int n,a[105]={};
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
} //输入
for(int i=1;i<=n-1;i++){
int mx=a[i],k=i;
for(int j=i+1;j<=n;j++){
if(a[j]>mx){
mx=a[j];
k=j;
}//特判
}
swap(a[i],a[k]);//交换
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}//输出
return 0;
}
4.函数(sort)
#include<bits/stdc++.h>
using namespace std;
int n,a[10001];
int cmp(int a,int b){
return a>b;
}//从大到小的函数
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
} //输入
sort(a+1,a+n+1,cmp);//排序函数,cmp是自定义从大到小函数,sort原本是从小到大的
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}//输出
return 0;
}
sort函数的头文件是 #include<algorithm>
如果你用了万能头就不用加了
今天我们就说到这里
下一次有时间抽空把归并和快排讲了。
我在重新申明一遍,我的代码是反复试验过的,绝对正确,但我不准抄袭复制
我只是一个刚学c++两年的小学生!!!!