stable_sort稳定排序

所谓稳定排序,是指对一个序列进行排序之后,如果两个元素的值相等,则原来乱序时在前面的元素现在(排好序之后)仍然排在前面。STL中提供stable_sort()函数来让我们进行稳定排序。为了更好的说明稳定排序的效果,我们定义了一个结构体元素,一个value成员和一个index成员,前者表示元素的值,后者表示乱序时的索引。

stable_sort()内部由归并排序来实现。

//Coded by 代码疯子
//http://www.programlife.net/
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

typedef struct TagNode
{
	int value;
	int index;
}Node;

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

int main(int argc, char **argv)
{
	vector<Node> coll;
	Node tmp;
	int idx = 0, num;
	
	while(cin >> num && num)
	{
		++idx;
		tmp.value = num;
		tmp.index = idx;
		coll.push_back(tmp);
	}
	
	stable_sort(coll.begin(), coll.end(), myCmp);
	
	cout << "Index\tValue:" << endl;
	vector<Node>::iterator pos;
	for(pos = coll.begin(); pos != coll.end(); ++pos)
	{
		cout << pos->index << "\t" << pos->value << endl;
	}

	return 0;
}

程序的运行结果如下图所示,可以看到,对于元素值相同的元素,索引小的在前面,稳定排序就是这么一个效果。

STL stable_sort

本文出自程序人生 >> STL stable_sort 稳定排序
作者:代码疯子

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sort和stable_sort都是排序算法。sort是基于快速排序实现的,而stable_sort是基于归并排序实现的。两者都可以对数据进行排序,但stable_sort是一种稳定排序,即排序后元素之间的相对位置不会改变,而sort是一种不稳定排序。在sort和stable_sort中,都可以自定义比较函数来指定排序的方式。在C++中使用这两个排序算法时,需要包含<algorithm>头文件。 在Python中,没有直接的stable_sort函数,但可以使用第三方库或自己实现稳定排序算法。python-stablesort是一个将Python 2.3中的稳定listsort算法移植到其他Python版本的项目。 归并排序可以在逻辑上看作是一个二叉树的操作,节点是数组区间,叶子节点的值就是数组元素。归并排序的过程类似二叉树的后序遍历。具体实现时,可以使用辅助数组来避免递归过程中频繁分配和释放内存的性能问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++中stable_sortsort学习及简单实现](https://blog.csdn.net/u012328476/article/details/124975509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python-stablesort-开源](https://download.csdn.net/download/weixin_42128537/18018185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值