众所周知,在c++中排序是一种非常重要的算法体现,穿插于大大小小的题目当中,基础的排序大多在CCF GESP C++ 四级的知识点中,所以,要入门c++,学会排序是必不可少的。
我们先来学习较为简单的桶排序。
【算法介绍】
桶排序的思想:
若待排序的值在一个有限范围内(整型)时,可设计有限个有序桶,桶号就是待排序的值。
之后,将待排序的值依次装入对应的有序桶中(重复值都装入对应的桶),然后顺序输出各桶的值,便得到有序的序列。
【算法代码】
cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=500;
int a[maxn];
int main() {
int n;
cin>>n;
int x;
for(int i=1; i<=n; i++) {
cin>>x;
a[x]++;
}
for(int j=1; j<=maxn; j++) {
while(a[j]>0) {
cout<<j<<" ";
a[j]--;
}
}
return 0;
}
由于桶排序需要创建多个桶,特别占用空间,尤其是它的时间复杂度也达到了O(n²),所以在信息学奥赛中不经常用。
接下来我们介绍sort排序。
【算法介绍】
sort是一个非常方便的排序算法,与其他不同,它不用长篇大论的打(代码),只需要套用就行,非常方便,时间复杂度也只有O(log2n),所以在许多比赛中也经常出现,它的格式是这样的:
cpp
sort(数组名+开始下标,数组名+开始下标+结束下标)
//这样做到的默认是从小到大排序。
当然,如果想要从大到小排,需要自己写一个函数为排序规则。
【算法代码】
从小到大排:
cpp
#include <bits/stdc++.h>
using namespace std;
const int maxn=100;
int a[maxn];
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=1; i<=n; i++) {
cout<<a[i]<<" ";
}
return 0;
}
从大到小排:
cpp
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int a[maxn];
int cmp(int a,int b){
return a>b;
}
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
sort(a+1,a+1+n,cmp);
for(int i=1; i<=n; i++) {
cout<<a[i]<<" ";
}
return 0;
}
本期就这样愉快地结束了(求赞求关)。