📜  c++ sort - C++ (1)

📅  最后修改于: 2023-12-03 15:29:49.894000             🧑  作者: Mango

C++ sort - 解析及用法介绍

C++ STL 中的 sort() 函数可以对数组或容器中的元素进行排序,是一种非常实用和高效的算法。本文将为您介绍 C++ sort 函数的基本用法,并针对常见使用场景提供一些实用的技巧和注意事项。

基本用法

sort() 函数位于头文件 algorithm 中,其基本用法为:

#include <algorithm>
using namespace std;

sort(begin, end[, cmp]);

其中:

  • begin :需排序的起始位置。
  • end :需排序的结束位置(不包含此位置元素)。
  • cmp :排序方式,可选参数。默认从小到大排列(即 less<int>())。

例如,对一个 vector 容器进行从小到大排序:

vector<int> nums = {3, 4, 1, 5, 2};
sort(nums.begin(), nums.end());

或者从大到小排序:

sort(nums.rbegin(), nums.rend());
cmp 函数

sort() 函数还可以传入一个 cmp 函数作为第三个参数,用于自定义排序规则。cmp 函数需接受两个参数,返回值为布尔类型,用于比较两个元素的大小关系。

例如,对一个字符串 vector 容器进行按长度排序:

vector<string> words = {"apple", "banana", "grape", "orange", "watermelon"};

bool cmp(string& a, string& b) {
    return a.length() < b.length();
}

sort(words.begin(), words.end(), cmp);
结构体排序

对于结构体数组,我们可以基于其中一个成员变量进行排序:

struct Student {
    string name;
    int score;
};

bool cmp(Student a, Student b) {
    return a.score > b.score;
}

int main() {
    vector<Student> students = {{"Alice", 90}, {"Bob", 80}, {"Cathy", 70}};

    sort(students.begin(), students.end(), cmp);

    return 0;
}
注意事项
  1. sort() 函数的时间复杂度为 O(nlogn),相对于其它排序算法有较高的效率。
  2. sort() 并不保证排序前后元素的相对顺序,如果需要保证序列的稳定性,可以使用 stable_sort(),但其执行时间可能会长一些。
  3. 由于 sort() 函数对内存占用较大,遇到大数据时需要慎重使用,考虑优化算法或分块处理。
  4. 由于 sort() 函数必须能够访问所有元素,因此只适用于进行内部排序,无法对文件或流进行排序。
结语

C++ sort 函数是一种非常实用和强大的排序算法,可以帮助程序员快速、高效地进行排序操作。我们在使用 sort() 函数时,应该注意选择合适的排序方式和参数,并避免使用不必要的内存和时间。希望本文对大家有所启发,如有不足之处,欢迎指正和补充。