首页 > 编程语言 >c++中的sort

c++中的sort

时间:2024-08-05 12:26:13浏览次数:16  
标签:sort 函数 自定义 int c++ persons 排序

前言

Hello,大家好啊,我是文宇。

正文

sort函数是C++标准库提供的用于对数组或容器中的元素进行排序的函数。通过使用快速排序或其它高效的排序算法,sort函数能够以非常高效的方式对元素进行排序。sort函数用法灵活多样,可以对不同类型的元素进行排序,并且可以通过自定义比较函数或函数对象来指定排序规则。

sort函数的常见用法如下:

  1. 使用默认排序规则:默认情况下,sort函数会使用“小于”运算符(<)来对元素进行排序。例如:
int arr[] = {4, 2, 6, 1, 8};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n);

// 输出排序后的数组
for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
}
// 输出结果:1 2 4 6 8

  1. 使用自定义排序规则:如果要对自定义的类型进行排序,可以通过重载“小于”运算符(<)来定义排序规则。例如,对自定义的Person类按照年龄进行排序:
class Person {
public:
    string name;
    int age;

    Person(string name, int age) {
        this->name = name;
        this->age = age;
    }

    bool operator<(const Person& other) const {
        return age < other.age;
    }
};

int main() {
    vector<Person> persons;
    persons.push_back(Person("Alice", 25));
    persons.push_back(Person("Bob", 20));
    persons.push_back(Person("Charlie", 30));

    sort(persons.begin(), persons.end());  // 使用重载的小于运算符

    // 输出排序后的人员名字和年龄
    for (int i = 0; i < persons.size(); i++) {
        cout << persons[i].name << " (" << persons[i].age << ")" << endl;
    }
    // 输出结果:
    // Bob (20)
    // Alice (25)
    // Charlie (30)

    return 0;
}

  1. 使用自定义比较函数:除了通过重载运算符来定义排序规则外,还可以通过传递自定义的比较函数或函数对象来指定排序规则。例如,按照字符串长度进行排序:
bool compareByLength(string& a, string& b) {
    return a.length() < b.length();
}

int main() {
    vector<string> words = {"cat", "apple", "dog", "banana"};

    sort(words.begin(), words.end(), compareByLength);

    // 输出排序后的单词
    for (int i = 0; i < words.size(); i++) {
        cout << words[i] << " ";
    }
    // 输出结果:dog cat apple banana

    return 0;
}

排序算法的选择: sort函数使用的是一种高效的排序算法,通常是快速排序(quicksort),但标准库实现中对排序算法的选择没有进行规定,因此可能会因不同的实现而有所不同。一些实现中可能会使用其它高效的排序算法,如归并排序(mergesort)或堆排序(heapsort)。

sort函数的时间复杂度: 快速排序的平均时间复杂度为O(n log n),其中n是数组或容器中的元素数量。这使得sort函数成为处理大型数据集的有力工具。然而,最坏情况下的时间复杂度为O(n^2),当输入数组已经有序或几乎有序时,快速排序的性能会下降。

sort函数的稳定性: sort函数通常是不稳定的,这意味着如果两个元素相等,排序后它们的相对位置可能会改变。这是由于使用分区操作的快速排序算法导致的。

如果需要保持稳定性,可以使用stable_sort函数,它使用归并排序算法来实现,虽然在某些情况下它可能会比sort函数更慢。

总结: sort函数是C++中用于排序的一个非常方便的工具。它可以用于对数字、自定义类型、字符串等进行排序。可以使用默认的“小于”运算符进行排序,也可以通过重载运算符、自定义比较函数或函数对象来定义排序规则。在排序之前,需要确保数组或容器中的元素类型支持排序操作,或者提供相关的比较函数。通过选择高效的排序算法,sort函数能够以非常高效的方式对大型数据集进行排序,但在某些情况下可能会导致性能下降。如果需要保持稳定性,可以使用stable_sort函数。

标签:sort,函数,自定义,int,c++,persons,排序
From: https://blog.csdn.net/2401_84159494/article/details/140904734

相关文章

  • C++ 动态内存管理: `std::unique_ptr
    定义与头文件std::unique_ptr的功能定义于<memory>头文件中。它主要用于管理动态分配的内存,保证资源正确释放。函数模板std::make_unique非数组类型template<classT,class...Args>unique_ptr<T>make_unique(Args&&...args);C++14起用于构造非数组类......
  • C++递归找规律典型题:派蒙的问题
    题目描述:有一天,旅行者和派蒙来到了一个未知的世界。这个世界充满了奇幻的景色和令人迷失的迷宫。他们决定一起探索这个神秘的地方,希望寻找宝藏和解开谜题。当他们穿越迷宫的时候,他们突然来到了一个巨大的房间。房间的中央有一个巨大的石头柱子,上面镶嵌着奇怪的符号和图案,上面......
  • c++递归算法较难题:分解数字
    题目描述:输入自然数 n,然后将其分拆成由若干数相加的形式,参与加法运算的数可以重复,要求输出降序排列。输入描述:一个待拆分的自然数n,(n≤50) 。输出描述:若干个拆分的加法等式。样例输入:5样例输出:5=55=4+15=3+25=3+1+15=2+2+15=2+1+1+15=1+1+1+1+1题目思想:将要分......
  • C++回溯算法经典例题:四皇后问题
    问题简介:在一个4×4的棋盘上,任意两个皇后都不能处在同一行、同一列任意两个皇后都不能处在同一斜线上(主斜线、反斜线)。题目分析:1.假设第一个皇后在(1,1):    1)在x=3时会卡死            2)在x=4时会卡死        2.假设第一个皇后在(2,1): ......
  • C++简单模拟:电梯问题
    问题描述:某城市最高建筑物只有一个电梯,一个请求列表是由 n 个正整数组成的。数字表示电梯将停在哪个楼层。电梯向上移动一层需要 6 秒,向下移动一层需要 4 秒。电梯每次停下会停留 5 秒,对于给定的请求列表,需要计算用于满足列表中所有请求的总时间。电梯开始时在第一层......
  • C++商店管理系统
    代码中使用了C++11的特性后面有些输出(cout输出的)的提示文本是英文,因为懒得敲中文源码在最后面文末投票参与一下谢谢商品数据保存在items.txt用户数据保存在users.txt实现功能1.添加商品(商品ID,商品名,库存数量,价格)填写完信息后询问是否执行2.修改商品(先提示原有信......
  • SpringBoot-书店信息管理系统+93494(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    基于springboot书店信息管理系统摘 要书店信息管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、轮播图、公告栏、资源管理(图书资讯、资讯分类)交流管理(留言板、留言板分类)系统用户(管理员、顾客用户......
  • 【每日一题】【DFS】【试除法求约数】【大剪枝】清楚姐姐跳格子 牛客周赛 Round 54 D
    牛客周赛Round54D题清楚姐姐跳格子题目背景牛客周赛Round54题目描述样例#1样例输入#1523154样例输出#12做题思路首先知道ai......
  • Halcon C++ 环境配置
    前言:这一段时间因为工作原因在使用Halcon做机器视觉的方案,因此学习了小半年的halcon,在学习过程中使用记事本记录下了学习过程中的一些经验,整理出来分享。目标:在VS2020编译环境下,配置Halcon的环境,使之能够调用Halcon的方法。方法:打开新建的项目,点开该项目的属性。在VC++目录......
  • C++(仿函数)
    目录1.仿函数的定义和使用2.仿函数的优点3.总结仿函数(Functor)是C++中的一种重要概念,它指的是一个重载了operator()的类或结构体。仿函数允许你像使用普通函数一样使用类的实例。它们通常用于需要函数作为参数的算法或需要自定义操作的场景。1.仿函数的定义和使用定义......