您的位置:首页 > 编程语言 > C语言/C++

C++标准库---sort()&stable_sort

2014-12-22 20:29 405 查看
sort(beg,end)

sort(beg,end,op)

stable(beg,end,)

stable(beg,end,op)

1.sort()与stable_sort()的上述第一形式,使用operator<对区间[beg,end)内的所有元素进行排序。

2.sort()与stable_sort()的上述第二形式,使用二元判断式op(elem1,elem2)作为排序准则,对区间[beg,end)内的所有元素进行排序。

3.sort()和stable_sort()的区别是,后者保证相等元素的原本相对次序在排序后保持不变。即stable_sort()是稳定排序。所谓稳定排序,是指对一个序列进行排序之后,如果两个元素的值相等,则原来乱序时在前面的元素现在(排好序之后)仍然排在前面。sort()没有这个承诺,而stable_sort()承诺了这一点。

4.不可以对list调用这些算法,因为list不支持随机存取迭代器,不过对于list,其自身带有成员函数,可以完成sort(),对其自身元素排序。

5.sort()的平均排序效能是nlogn,如果想避免可能出现的差情况,应该使用partial_sort()。

6.sort()内部使用快速排序,stable_sort()使用归并排序。

代码示例:

#include"fuzhu.h"

using namespace std;

int main()
{
	deque<int> coll;

	INSERT_ELEMENTS(coll,1,9);

	INSERT_ELEMENTS(coll,1,9);

	PRINT_ELEMENTS(coll,"on entry: ");

	sort(coll.begin(),coll.end());  // [beg,end)  默认less  <

	PRINT_ELEMENTS(coll,"sorted: ");

	sort(coll.begin(),coll.end(),greater<int>());   //[beg,end) greater >

	PRINT_ELEMENTS(coll,"sorted >: ");

	system("pause");
	return 0;
}


运行结果:



#include"fuzhu.h"

using namespace std;

struct Node
{
	int value;
	int index;
};

bool mycmp(const Node& a,const Node& b)
{
	return a.value<b.value;
}

int main()
{
	vector<Node> coll;
	vector<Node>::iterator pos;

	Node node;

	int va;

	for(int i=0;i<=8;i++)
	{
		cin>>va;
		node.value=va;
		node.index=i;
		coll.push_back(node);
	}

	stable_sort(coll.begin(),coll.end(),mycmp);

	//sort(coll.begin(),coll.end(),mycmp);
	
	cout<<"stable_sort: "<<endl;

	for(pos=coll.begin();pos!=coll.end();++pos)
	{
		cout<<pos->value<<" "<<pos->index<<endl;
	}

	system("pause");
	return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: