algorithm库介绍之---- stable_sort()方法 与 sort()方法

转载 2012年09月15日 16:23:21

文章转载自:http://www.cnblogs.com/ffhajbq/archive/2012/07/24/2607476.html

关于stable_sort()和sort()的区别:

你发现有sort和stable_sort,还有 partition 和stable_partition, 感到奇怪吧。其中的区别是,带有stable的函数可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清 楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一摸一样的元素。

例如,如果你写一个比较函数:

bool less_len(const string &str1, const string &str2)
{
        return str1.length() < str2.length();
}

此时,"apple" 和 "winter" 就是相等的,如果在"apple" 出现在"winter"前面,用带stable的函数排序后,他们的次序一定不变,如果你使用的是不带"stable"的函数排序,那么排序完 后,"Winter"有可能在"apple"的前面。

举例说明:

#include <vector>
 #include <iostream>
 #include <algorithm>
 
 using namespace std;
 
 bool comp_as_int(double i, double j)
 {
     return (int(i)<int(j));
 }
 
 
 int main()
 {
     double mydoubles[] = {3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58};
     vector<double> v;
     vector<double>::iterator it;
 
     v.assign(mydoubles, mydoubles + 8);
     
     cout<<"use default comparison:"<<endl;
     stable_sort(v.begin(), v.end());
 
     for(it = v.begin(); it != v.end(); it++)
         cout<<*it<<" ";
     cout<<endl;
 
     cout<<"use selfdefined comparison function comp_as_int():"<<endl;
     v.assign(mydoubles, mydoubles + 8);
     stable_sort(v.begin(), v.end(), comp_as_int);
     
     for(it = v.begin(); it != v.end(); it++)
         cout<<*it<<" ";
     cout<<endl;
     cout<<"if it is not sorted with stable_sort(), the sequence of all elements between 1 and 2 will be set randomly..."<<endl;
 
     return 0;
 }

输出结果:

1 use default comparison:
2 1.32 1.41 1.62 1.73 2.58 2.72 3.14 4.67
3 use selfdefined comparison function comp_as_int():
4 1.41 1.73 1.32 1.62 2.72 2.58 3.14 4.67
5 if it is not sorted with stable_sort(), the sequence of all elements between 1 and 2 will be set randomly...



STL之stable_sort与sort

这两个函数都能完成排序,时间复杂度在所有的排序中也是最低,唯一的差别就是stable_sort是一种稳定的排序,在两个元素相同的时候不交换位置,而sort则不然,这个差别在单一普通数组排序中没影响,但...

stable_sort() 和 sort() 的区别

1.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同"的值在序列中的相对位置不变 如 1 4 6 7 4' (4 和 4'值相等,加上' 表示是2个元素) 那么st...

stable_sort()与sort()的用法区别

关于stable_sort()和sort()的区别: 你发现有sort和stable_sort,还有 partition 和stable_partition, 感到奇怪吧。其中的区别是,带有st...
  • earbao
  • earbao
  • 2017年02月07日 16:42
  • 661

stl-stable_sort源码学习笔记

huangjunkun的博客 huangjunkun的主页 | TA的博客列表 | RSS | 发送留言 | 关注此人 0人收藏此文章, 收藏此文章 发表于3个月前 ...

STL_算法_对所有元素排序(sort、stable_sort)

C++ Primer 学习中。。。   简单记录下我的学习过程 (代码为主) //大部分容器适用、不适用于list容器 sort(b,e) sort(b,e,p) ...

stable_sort()与sort()的用法区别

 文章转载自:http://www.cnblogs.com/ffhajbq/archive/2012/07/24/2607476.html 关于stable_sort()和sort()...

C++ sort() 与stable_sort()

sort的应用; 1、可以传入两个参数;      sort(a,a+N) ,其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序); 2、传入三个参数...
  • glp_hit
  • glp_hit
  • 2012年10月25日 20:21
  • 2306

STL中的排序算法 sort stable_sort patition_sort等

1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,...

C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

sort和stable_sort的区别和联系

这两个函数的原理都是快速排序,时间复杂度在所有排序中最低,为O(nlog2n) ; 一,不同之处 1,.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:algorithm库介绍之---- stable_sort()方法 与 sort()方法
举报原因:
原因补充:

(最多只允许输入30个字)