C++ STL中常用的排序算法 20180331 day17

#include<iostream>
using namespace std;
#include<vector>
#include"functional"
#include"algorithm"
#include<set>
#include<string>
#include<list>
#include<stack>


//merge算法  前提是 合并两个有序的序列
void main61()
{
	vector<int> v1;
	vector<int> v2;
	vector<int> v3;

	v1.push_back(1);
	v1.push_back(4);
	v1.push_back(7);
	
	v2.push_back(2);
	v2.push_back(5);
	v2.push_back(10);

	v3.resize(10);

	merge(v1.begin(),v1.end(),v2.begin(), v2.end(),v3.begin());

	for (vector<int>::iterator it = v3.begin(); it != v3.end(); it++)
	{
		cout << *it << " ";
	}
	
	 
}
class Teacher
{
public:
	Teacher(int age);
	~Teacher();

public:
	int m_age;

};

Teacher::Teacher(int age)
{
	this->m_age = age;
}


Teacher::~Teacher()
{

}

struct fllowAge{
	bool operator()(const Teacher &left, const Teacher &right)
	{
		if (left.m_age > right.m_age)
		{
			return true;
		}
		else
		{
			return false;
		}
	}


};

//sort算法 实现自定义数据类型的排序
void main62()
{
	Teacher t1(10);
	Teacher t2(40);
	Teacher t3(20);
	Teacher t4(100);
	Teacher t5(50);

	vector<Teacher> m_vt;

	m_vt.push_back(t1);
	m_vt.push_back(t2);
	m_vt.push_back(t3);
	m_vt.push_back(t4);
	m_vt.push_back(t5);

	//sort 根据自定义的函数对象的排序
	//实现了算法和数据类型的分离 通过函数对象来实现
	sort(m_vt.begin(), m_vt.end(), fllowAge());

	for (vector<Teacher>::iterator it = m_vt.begin(); it != m_vt.end(); it++)
	{
		cout << (*it).m_age << " ";
	}

}

// random_shuffle() 随机洗牌 算法 打乱基础数据类型顺序

void main63()
{
	vector<int> v1;

	v1.push_back(1);
	v1.push_back(4);
	v1.push_back(5);
	v1.push_back(6);
	v1.push_back(7);
	v1.push_back(8);

	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	random_shuffle(v1.begin(), v1.end());

	for (vector<int>::iterator it1 = v1.begin(); it1 != v1.end(); it1++)
	{
		cout << *it1 << " ";
	}
	cout << endl;
	//同是可以实现对于string数据类型的顺序打乱
	string str = "hellocjlu";
	random_shuffle(str.begin(), str.end());
	cout << str << endl;


	//栈操作复习

	stack<int> m_stk;

	m_stk.push(2);
	m_stk.push(1);
	m_stk.push(5);
	m_stk.push(6);

	while (!m_stk.empty())
	{
		cout << m_stk.top() << " ";
		m_stk.pop();
	}



}


//reverse()   算法 倒序  将容器中的元素倒序 
void main64()
{
	vector<int> v1;

	v1.push_back(1);
	v1.push_back(4);
	v1.push_back(5);
	v1.push_back(6);
	v1.push_back(7);
	v1.push_back(8);

	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	reverse(v1.begin(), v1.end());

	for (vector<int>::iterator it1 = v1.begin(); it1 != v1.end(); it1++)
	{
		cout << *it1 << " ";
	}
	cout << endl;
}
int main()
{
//	main61(); //merge算法
	//main62(); //sort算法
	//main63(); // random_shuffle() 算法 打乱基础数据类型顺序
	main64(); //reverse()   算法 倒序
	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、付费专栏及课程。

余额充值