1.开头
只要是C++的萌新做题时一定会碰到一个问题那就是——排序!!!
今天我们来解决这些问题
2.两种排序方式
2-1.双重循环排序
这个比较复杂, 原理是先遍历数组中所有的元素(下列简称遍历A), 再遍历序号比目前遍历的A大的元素, 最后判断, 如果你要从小到大排序, 那么你应该发现A后面有比A小的就把A和那个数互换, 反之如果你要从大到小排序, 那么你应该发现A后面有比A大的就把A和那个数互换.
拓展一下互换的方法: 可以直接用<algorithm>中的swap函数实现.
听着是不是有点绕? 我们举个例子看看.
#include <iostream>
#include <algorithm>
using namespace std;
int a[10] = {0, 1, 6, 2, 5, 3, 4};
int main(){
cout << "原数组:" << endl;
for(int i = 1; i <= 6; i++){
cout << a[i] << ' ';
}
cout << endl << "--------------------" << endl;
for(int i = 1; i <= 6; i++){ // 从大到小
for(int j = i + 1; j <= 6; j++){
if(a[j] > a[i]) swap(a[i], a[j]);
}
}
cout << "从大到小排序后:" << endl;
for(int i = 1; i <= 6; i++){
cout << a[i] << ' ';
}
cout << endl << "--------------------" << endl;
for(int i = 1; i <= 6; i++){ // 从小到大
for(int j = i + 1; j <= 6; j++){
if(a[j] < a[i]) swap(a[i], a[j]);
}
}
cout << "从小到大排序后:" << endl;
for(int i = 1; i <= 6; i++){
cout << a[i] << ' ';
}
return 0;
}
输出:
原数组:
1 6 2 5 3 4
--------------------
从大到小排序后:
6 5 4 3 2 1
--------------------
从小到大排序后:
1 2 3 4 5 6
这种方法非常繁琐, 那有没有简单的方法呢? 看第二种方法吧!
2-2.sort函数
我们可以直接调用<algorithm>库中的sort函数, 它默认从小到大排序.他的最简语法是:
sort(arrayname + start, arrayname + end + 1)
arrayname: 数组名
start: 开始的索引值
end: 结束的索引值
如果我们要从大到小, 或者添加更多的条件呢? sort给了我们灵活的选择, 我们可以自己定义cmp函数.cmp函数实现从大到小排序的方法如下:
bool cmp(int x, int y){
return x > y;
}
// 在主函数中使用sort(a + 1, a + n + 1, cmp) 就可以啦!
这就是sort函数的用法.
2-3.方法对比
显然是cmp函数胜出! 而且很多题目他可能会卡你的内存和数据范围, 强迫你用sort函数.
3.愉快的结尾
欢迎在评论区提出意见和疑问!
制作不易, 请勿盗版!