Python 中的排序

在 Python 中,常用的排序就是 sorted ,对于列表这种数据结构来说,还有 sort 方法

列表的排序

使用 sort 方法进行排序,以第二个值进行升序排序,列表的 sort 方法是原地排序
image.png
另外一种排序方法是 sorted ,此方法不是原地排序,以第一个值进行排序,同样也是默认升序排序
image.png

字典排序

有时候我们也需要对字典进行排序,也是使用 sorted 函数,不过对字典排序后返回的是列表,列表中是元组(tuple)
image.png

C++ 中的排序

对 vector 排序

要对 vector 容器中的元素排序,可以使用 algorithm 算法库中的 sort 函数

  1. #include<vector>
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. int main() {
  6. vector<int> a;
  7. cout << "sort before" << endl;
  8. for (int i = 0; i <10; i++){
  9. a.push_back(10-i);
  10. cout << a[i] << " ";
  11. }
  12. cout << endl;
  13. cout << "sort after" << endl;
  14. sort(a.begin(), a.end()); //
  15. for (int i = 0; i < 10; i++)
  16. {
  17. cout << a[i] << " " ;
  18. }
  19. cout << endl;
  20. return 0;
  21. }

image.png

对 vector> 排序

类似于 Python ,我们也可以指定根据哪个元素进行排序

  1. #include<vector>
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. # 根据第二个元素进行排序
  6. bool sort_by_second_val(vector<int> v1, vector<int> v2) {
  7. return v1[1] > v2[1];
  8. }
  9. int main() {
  10. // 模拟一个输入
  11. vector < vector<int>> arr;
  12. for (int i = 0; i < 10; i+=2)
  13. {
  14. vector<int> temp;
  15. temp.push_back(i);
  16. temp.push_back(i+1);
  17. arr.push_back(temp);
  18. }
  19. // 排序前:arr = [[0, 1], [2, 3], [4, 5], [6, 7],[8, 9]]
  20. sort(arr.begin(), arr.end(), sort_by_second_val);
  21. // 排序后:arr = [[8, 9], [6, 7], [4, 5], [2, 3],[0, 1]]
  22. return 0;
  23. }

对结构体进行排序

模拟一个学生管理系统,依次创建学生信息,然后加入到 vector 中,接着对学生的年龄进行排序

  1. #include<vector>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include <string.h>
  5. using namespace std;
  6. struct Studen{
  7. string name;
  8. int age;
  9. };
  10. bool sort_by_age(Studen s1, Studen s2) {
  11. return s1.age< s2.age;
  12. }
  13. int main() {
  14. vector<Studen> studens; // 用来存储所有学生的信息
  15. Studen s1, s2, s3; // 创建 3 个学生
  16. s1.name = "xx";
  17. s1.age = 20;
  18. studens.push_back(s1);
  19. s2.name = "yy";
  20. s2.age = 18;
  21. studens.push_back(s2);
  22. s3.name = "zz";
  23. s3.age = 10;
  24. studens.push_back(s3);
  25. sort(studens.begin(), studens.end(), sort_by_age);
  26. return 0;
  27. }

排序前
image.png
排序后
image.png