如何利用std::sort()完成升序和降序

一、基本用法

    std::sort()是C++标准库中的一个函数,用于对给定范围内的元素进行排序。它可以接受一个数组、向量或其他容器,并按照默认的升序方式对元素进行排序。

#include <algorithm> // 引入算法头文件

// 对数组进行排序
int arr[] = {5, 3, 1, 4, 2};
std::sort(arr, arr + sizeof(arr) / sizeof(int));

// 对向量进行排序
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end());

        在上述示例中,std::sort()函数接受两个迭代器作为参数,表示要排序的范围。对于数组,可以使用指针运算来指定范围;对于向量,可以使用.begin().end()方法来获取范围。

        默认情况下,std::sort()使用"小于"运算符(<)来比较元素并进行排序。

二、升序降序

        std::sort()函数一般默认进行的是升序排序,如果需要自定义比较函数或使用其他排序准则,可以通过提供第三个可选参数来实现,具体来说,可以使用std::greater这个预定义的函数对象。

#include <algorithm> // 引入算法头文件
#include <vector>    // 引入向量头文件
#include <functional> // 引入功能性头文件

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

        在这个例子中,std::greater<int>()作为第三个参数传递给std::sort()函数,它告诉std::sort()使用大于运算符(>)来比较元素,从而实现降序排序。

        此外,如果不想使用预定义的std::greater,也可以自定义比较函数。例如,使用lambda表达式来定义一个降序比较函数:

std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });

 或者

bool greaterSort(const int &a, const int &b)//自定义函数
{
    return a > b
}

std::sort(vec.begin(), vec.end(), greaterSort);

        这样,std::sort()函数会使用这个lambda表达式或自定义函数来进行比较和排序,同样可以实现降序排序。

三、sort排序原理

  1. 确定排序范围:通过传递的起始和结束迭代器来确定需要排序的元素范围。
  2. 选择合适的排序算法std::sort 并不是单一的一种排序算法,而是根据数据的特点和数量选择最合适的排序方法。它通常使用经过优化的快速排序算法,但在某些情况下,比如小数组或者近乎有序的情况下,可能会使用插入排序或堆排序。
  3. 进行排序:在确定了排序算法后,std::sort 会根据比较函数(如果没有提供,则使用默认的比较方式)对元素进行排序,直到整个序列变得有序。
  4. 时间复杂度std::sort 的平均时间复杂度为 O(N·log(N)),其中 N 是需要排序的元素数量。
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值