C++ sort()

使用前需要引入头文件: #include<algorithm>

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

(1)第一个参数first:是要排序的数组的起始地址。

(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)

(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序,排序方法为快速排序,时间复杂度为O(nlog2n)。

#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
	int i,j,n;
	int a[201];
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a,a+n,cmp);
	for(j=0;j<n;j++){
		cout<<a[j]<<' ';
	}
	cout<<endl;
	return 0;
}

//自定义函数 降序
bool cmp(int a,int b){
    return a>b
}

### C++ 中 `std::sort` 函数的用法与实现 在 C++ 标准库中,`std::sort` 是一个用于对容器或数组进行排序的高效算法[^1]。它位于头文件 `<algorithm>` 中,并且通常基于快速排序(QuickSort)或其变体实现,例如 introsort(一种结合了快速排序、堆排序和插入排序的混合排序算法)。以下是关于 `std::sort` 的详细说明: #### 1. 基本语法 `std::sort` 的基本语法如下: ```cpp template< class RandomIt > void sort( RandomIt first, RandomIt last ); ``` 或者带有自定义比较函数的形式: ```cpp template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); ``` - `first` 和 `last` 分别表示要排序的范围的起始和结束迭代器。 - `comp` 是一个可选参数,用于指定自定义比较逻辑。 #### 2. 示例代码 以下是一个简单的示例,展示如何使用 `std::sort` 对整数向量进行排序: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {5, 2, 9, 1, 5, 6}; // 使用默认升序排序 std::sort(numbers.begin(), numbers.end()); for (const auto& num : numbers) { std::cout << num << " "; } std::cout << std::endl; return 0; } ``` 如果需要降序排序,可以传递一个自定义比较函数: ```cpp std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; // 降序排序 }); ``` #### 3. 实现细节 `std::sort` 的具体实现依赖于标准库的实现方式。大多数现代 C++ 标准库(如 GNU libstdc++ 或 LLVM libc++)采用 introsort 算法[^3]。Introsort 结合了以下几种排序方法: - 快速排序:用于大多数情况下的高效排序。 - 堆排序:当递归深度超过某个阈值时切换到堆排序,以避免快速排序的最坏情况。 - 插入排序:对于小规模数据集,切换到插入排序以提高性能。 #### 4. 时间复杂度 - 平均时间复杂度:O(n log n) - 最坏时间复杂度:O(n log n),由于引入了堆排序作为后备机制。 - 空间复杂度:O(log n),主要由递归调用栈占用。 #### 5. 注意事项 - `std::sort` 需要随机访问迭代器(Random Access Iterator),因此无法直接用于某些容器(如 `std::list`)。 - 排序过程中会修改原始容器的内容,若需要保留原始顺序,请先复制容器内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值