C++ sort
函数
1. 什么是排序?
排序就是将一组数据按特定的顺序排列起来。通常我们希望将数据按从小到大(升序)或者从大到小(降序)的顺序排列。
比如,假设我们有一组数字:
[5, 3, 9, 1, 4]
如果按从小到大的顺序排列,它会变成:
[1, 3, 4, 5, 9]
2. C++中的 sort
函数
在 C++ 中,有一个非常有用的函数叫做 sort
,它可以帮助我们对一组数据进行排序。我们可以使用这个函数对数组或容器中的元素进行排序。
sort
的基本语法
#include <algorithm> // 引入这个头文件才能使用 sort 函数
sort(开始位置, 结束位置);
开始位置
:排序范围的开始,通常是数组或容器的第一个元素。结束位置
:排序范围的结束,但并不包含该位置的元素。
例子:如何对一组数字排序?
我们来看看如何使用 sort
排序一个数字数组。
#include <iostream>
#include <algorithm> // 必须要有这个头文件来使用 sort
using namespace std;
int main() {
// 定义一个包含数字的数组
int arr[] = {5, 3, 9, 1, 4};
// 使用 sort 函数进行排序
sort(arr, arr + 5); // arr 是数组,arr + 5 是数组末尾的指针
// 输出排序后的数组
cout << "排序后的数组是: ";
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
return 0;
}
输出:
排序后的数组是: 1 3 4 5 9
解释:
arr
是我们定义的数字数组。arr + 5
表示数组的结束位置,实际上是数组最后一个元素的下一个位置。sort(arr, arr + 5)
会把数组中的数字按从小到大的顺序排序。
3. 如何控制排序顺序?
默认情况下,sort
是按从小到大的顺序排序的。但是如果你想按从大到小的顺序排序,我们可以给 sort
函数提供一个比较规则。
例子:按从大到小排序
#include <iostream>
#include <algorithm> // 必须要有这个头文件来使用 sort
using namespace std;
int main() {
int arr[] = {5, 3, 9, 1, 4};
// 使用 sort 函数按从大到小的顺序排序
sort(arr, arr + 5, greater<int>()); // greater<int>() 让排序从大到小
// 输出排序后的数组
cout << "按从大到小排序后的数组是: ";
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
return 0;
}
输出:
按从大到小排序后的数组是: 9 5 4 3 1
解释:
greater<int>()
是 C++ 标准库提供的一个函数对象,用来让排序从大到小进行。sort(arr, arr + 5, greater<int>())
表示将数组按从大到小的顺序排序。
4. 排序时使用字符串
sort
函数不仅能排序数字,还可以排序字符串。我们来看一个例子,排序一组名字。
例子:按字母顺序排序名字
#include <iostream>
#include <algorithm> // 引入这个头文件来使用 sort
#include <string> // 需要引入 string 头文件来使用字符串类型
using namespace std;
int main() {
string names[] = {"Tom", "Alice", "Bob", "David"};
// 使用 sort 函数按字母顺序排序
sort(names, names + 4); // names 数组的开始位置和结束位置
// 输出排序后的名字
cout << "按字母顺序排序后的名字是: ";
for (int i = 0; i < 4; i++) {
cout << names[i] << " ";
}
return 0;
}
输出:
按字母顺序排序后的名字是: Alice Bob David Tom
解释:
- 我们使用
sort(names, names + 4)
来对字符串数组进行排序。 - 排序的规则是字母顺序(从 A 到 Z)。
5. 排序多个数据(二维数组)
有时候我们想对一组由多个数据组成的数组进行排序,比如每个元素都是一个数组,这时可以使用自定义的比较方法来排序。
例子:排序二维数组
假设我们有一个学生成绩的二维数组,每一行代表一个学生的信息,包括名字和成绩。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
// 定义一个二维数组,包含学生的名字和成绩
string students[][2] = {{"Tom", "90"}, {"Alice", "85"}, {"Bob", "95"}};
// 使用 sort 函数按成绩排序
sort(students, students + 3, [](string a[2], string b[2]) {
return stoi(a[1]) > stoi(b[1]); // 按成绩从大到小排序
});
// 输出排序后的学生信息
cout << "按成绩排序后的学生信息是:" << endl;
for (int i = 0; i < 3; i++) {
cout << students[i][0] << ": " << students[i][1] << endl;
}
return 0;
}
输出:
按成绩排序后的学生信息是:
Bob: 95
Tom: 90
Alice: 85
解释:
- 我们使用了一个二维数组,其中每一行包含一个学生的名字和成绩。
sort(students, students + 3, [](string a[2], string b[2]) { ... })
这行代码实现了按学生成绩排序,stoi(a[1])
把成绩从字符串转成整数,再进行比较。
总结
- 排序基本原理:
sort
函数通过比较数据来实现排序,默认为升序排列。 - 如何使用
sort
:通过指定数组的开始位置和结束位置,可以对一组数据进行排序。 - 排序规则:可以使用
greater<>()
来实现降序排序,或者自定义比较规则。 - 排序字符串:
sort
也可以用来排序字符串,默认按照字母顺序排序。 - 二维数组排序:可以通过自定义比较函数来对多维数组进行排序。