C++:STL-常用排序算法

在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
#include<ctime>

using namespace std;


//sort排序
class nSort
{
public:
	bool operator()(int num1, int num2)
	{
		return num1 > num2;
	}
};
void test01()
{
	vector<int>v = { 5,6,4,9,1,3,7,8,0,2 };

	//默认升序
	sort(v.begin(), v.end());
	
	for (auto i : v)
	{
		cout << i << " ";
	}
	cout << endl;

	//使用自定谓词进行降序,也可以使用关系仿函数
	//sort(v.begin(), v.end(), greater<int>());
	sort(v.begin(), v.end(), nSort());
	for (auto i : v)
	{
		cout << i << " ";
	}
	cout << endl;
	//排序类对象时需传入两个类对象
}

//random_shuffle  洗牌 指定范围内元素随机调整次序
void test02()
{
	vector<int>v = { 0,1,2,3,4,5,6,7,8,9 };
	//设置随机数种子
	srand(time(NULL));
	random_shuffle(v.begin(), v.end());
	for (auto i : v)
	{
		cout << i << " ";
	}
	cout << endl;
}

//merge 两个容器元素合并(必须是有序和同序),并存储到另一个容器中,合并后还是有序
void test03()
{
	vector<int>v1 = { 0,1,2,3,4,5,6,7,8,9 };
	vector<int>v2 = { 1,2,3,4,5,6,7,8,9,10 };
	vector<int>v3;
	//设置大小
	v3.resize(v1.size() + v2.size());
	//合并
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
	for (auto i : v3)
	{
		cout << i << " ";
	}
	cout << endl;
}

//reverse 反转指定范围元素
void vPrint(int v)
{
	cout << v << " ";
}
void test04()
{
	vector<int>v = { 0,1,2,3,4,5,6,7,8,9 };
	cout << "反转前:" << endl;
	//遍历
	for_each(v.begin(), v.end(), vPrint);
	cout << endl;
	
	cout << "反转后:" << endl;
	reverse(v.begin(), v.end());

	for_each(v.begin(), v.end(), vPrint);
	cout << endl;
}


int main()
{
	test04();


	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11STL中常用排序算法有以下几种: 1. sort sort是STL中最常用排序算法,它可以对容器中的元素进行排序。sort的时间复杂度为O(NlogN),使用快速排序算法实现。sort的基本使用方法如下: ```c++ sort(begin, end); // 对区间[begin, end)内的元素排序 ``` 其中,`begin`和`end`分别是容器中要排序的元素的起始和结束迭代器。 此外,sort还可以接受一个可调用对象作为参数,来实现自定义的排序方法。例如,可以按照元素的某个属性进行排序: ```c++ sort(v.begin(), v.end(), [](const auto& a, const auto& b) { return a.property < b.property; }); // 按照元素的property属性进行排序 ``` 2. stable_sort stable_sort与sort的用法类似,也可以对容器中的元素进行排序,但它保证了相等元素的相对顺序不会发生改变。stable_sort的时间复杂度为O(NlogN),使用归并排序算法实现。stable_sort的基本使用方法如下: ```c++ stable_sort(begin, end); // 对区间[begin, end)内的元素排序 ``` 3. partial_sort partial_sort可以对容器中的元素进行部分排序,即只将前k个最小(或最大)的元素放在容器的前k个位置上。partial_sort的时间复杂度为O(Nlogk),使用堆排序算法实现。partial_sort的基本使用方法如下: ```c++ partial_sort(begin, middle, end); // 将区间[begin, end)内的前middle-begin个元素排序,其他元素保持原有顺序 ``` 其中,`middle`是一个迭代器,指向容器中排序后前middle-begin个元素的末尾位置。 4. nth_element nth_element可以找出容器中第k小(或第k大)的元素。nth_element的时间复杂度为O(N),使用快速选择算法实现。nth_element的基本使用方法如下: ```c++ nth_element(begin, nth, end); // 将区间[begin, end)内的元素排序,使得第nth个元素是第nth小的元素 ``` 其中,`nth`是一个迭代器,指向容器中第nth小的元素。 以上就是C++11STL中常用排序算法,可以根据实际需求选择适合的算法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值