C++sort 函数用法

本文详细介绍了C++ STL中的sort函数用法,包括默认升序排序及通过自定义比较函数实现的降序和其他复杂排序方式。同时对比了C语言中的qsort函数,并提供了具体的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MSDN中的定义:

template<class RanIt>
void sort(RanIt first, RanIt last); //--> 1)
template<class RanIt, class Pred>
void sort(RanIt first, RanIt last, Pred pr); //--> 2)


头文件:
#include <algorithm>
using namespace std;

1.默认的sort函数是按升序排。对应于1)
sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址
2.可以自己写一个cmp函数,按特定意图进行排序。对应于2)
例如:
int cmp( const int &a, const int &b ){
if( a > b )
return 1;
else
return 0;
}
sort(a,a+n,cmp);
是对数组a降序排序
又如:
int cmp( const POINT &a, const POINT &b ){
if( a.x < b.x )
return 1;
else
if( a.x == b.x ){
if( a.y < b.y )
return 1;
else
return 0;
}
else
return 0;
}
sort(a,a+n,cmp);
是先按x升序排序,若x值相等则按y升序排



与此类似的还有C中的qsort,以下同附上qsort的使用方法:

#include <stdlib.h>

格式 qsort(array_name,data_number,sizeof(data_type),compare_function_name) (void*)bsearch (pointer_to_key_word,array_name,find_number,

sizeof(data_type),compare_function_name)

e.g.

int Cmp(const void*a,const void *b)

{

int*pa=(int*)a,*pb=(int*)b;

if(*pa>*pb) return 1;

else if (*pa==*pb) return 0;

else return -1;

}

qsort(data,N,sizeof(int),Cmp); // 对int型数组进行快速排序(非降序排列)

p=(int*)bsearch(&a,data,n,sizeof(int),Cmp);

### C++ 中 `sort()` 函数的使用方法 #### 基本概念 `sort()` 是 C++ 标准模板库(STL)中的一个函数模板,位于 `<algorithm>` 头文件中。此函数用于数组或容器内的元素进行排序操作[^1]。 --- #### 函数原型 以下是 `sort()` 的几种常见形式: 1. **默认升序排序** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last); ``` 参数解释: - `first`: 排序范围的第一个迭代器。 - `last`: 排序范围最后一个位置之后的一个迭代器(即不包含该位置上的元素)。 2. **自定义排序方式** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); ``` 这里增加了一个第三个参数 `comp`,表示用户可以提供自己的比较逻辑来决定排序顺序[^2]。 --- #### 示例代码 ##### 例子 1: 对整型数组进行升序排列 ```cpp #include <iostream> #include <algorithm> int main(){ int n; std::cin >> n; int a[n]; for(int i=0;i<n;i++) { std::cin >> a[i]; } // 调用 sort() 函数,默认按升序排序 std::sort(a, a+n); for(int i=0;i<n;i++) { std::cout << a[i] << " "; } return 0; } ``` 上述程序读取一组整数并将其从小到大排序输出[^4]。 --- ##### 例子 2: 自定义降序排序 (通过 Lambda 表达式) 如果希望按照降序排列,则可以通过传递一个 lambda 表达式作为第三个参数给 `sort()` 来实现这一点: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ vector<int> v{5, 3, 8, 6, 9}; // 使用lambda表达式指定降序规则 sort(v.begin(), v.end(), [](const int& lhs, const int& rhs){ return lhs > rhs; }); for(auto num : v){ cout<<num<<" "; } return 0; } ``` 在这个版本中,我们利用了 STL 容器 `vector`, 并且借助匿名函数指定了新的比较准则——当左边大于右边时交换两者的位置. --- #### 反向排序的方法 除了上面提到的方式外,还可以直接调用预定义好的类对象来进行逆序处理。比如下面展示的是如何运用标准库里的 `std::greater<>` 实现同样的效果: ```cpp #include <functional> // 需要引入 functional 库支持 greater<T>() ... // 利用 std::greater 达成降序目的 sort(vec.begin(), vec.end(), std::greater<int>()); ``` 这里采用了泛化后的写法,适用于任何内置或者用户定义的数据类型[^5]。 --- ### 总结 综上所述,在实际开发过程中可以根据具体需求灵活选用不同的策略完成相应的任务;无论是简单的数值列表还是复杂的结构体集合都可以轻松应对!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值