STL算法之sort和stable_sort

1.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同"的值在序列中的相对位置不变如 1 4 6 7 4' (4 和 4'值相等,加上' 表示是2个元素)那么stable_sort能保证排序完 4 仍然在4' 前 也就是输出1 4 4' 6 7;但是sort 没有这个功能,算法不能保证这一点2.在标准算法中的一部分算法 如果这个算法默认使用的是
摘要由CSDN通过智能技术生成
1.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同"的值在序列中的相对位置不变

如 1 4 6 7 4' (4 和 4'值相等,加上' 表示是2个元素)
那么stable_sort能保证排序完 4 仍然在4' 前 也就是输出1 4 4' 6 7;但是sort 没有这个功能,算法不能保证这一点


2.在标准算法<algorithm>中的一部分算法 如果这个算法默认使用的是 < 运算符,那么这类算法通常提供一个重载版本,这个重载版本包括3个参数,而不是2个.新增的第三个参数是一个函数指针,这个函数指针指向的函数 就是用来代替默认的 < 运算符的.
也就是说如果容器中的2个元素 ,元素a和元素b,输入个这个新增的比较函数之后,函数返回true,那么a将会放在b前面,LZ给的例子里面这个比较函数能够用使长度大的排在前面.

同时,使用了stable_sort能够保证2个长度相同的元素按原顺序排列


//大部分容器适用、不适用于list容器
sort(b,e)
sort(b,e,p)
stable_sort(b,e)
stable_sort(b,e,p)

  1. #include<iostream>  
  2. #include<cstdio>  
  3. #include<string>  
  4. #include<vector>  
  5. #include<list>  
  6. #include<deque>  
  7. #include<algorithm>  
  8. using namespace std;  
  9.   
  10. /***************************************** 
  11. //大部分容器适用、不适用于list容器 
  12. sort(b,e) 
  13. sort(b,e,p) 
  14. stable_sort(b,e) 
  15. stable_sort(b,e,p) 
  16. *****************************************/  
  17. /**---------------------------------------------------------------------------------- 
  18. 注意:不适用于list容器,list有成员函数sort() 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,stable_sort是一种稳定排序算法,它基于归并排序实现。稳定排序意味着排序后元素之间的相对位置不会发生变化。stable_sort适用于对比较复杂的数据进行排序,比如订单数据中已经按照订单号排好了,现在想对交易日期再进行排序。stable_sort的时间复杂度为O(NlogN),空间复杂度为O(N)。\[2\] 在STL中,stable_sort的实现实际上就是归并排序。然而,由于归并排序需要额外的数组来执行归并操作,所以如果没有足够的空间,就无法正常进行归并。STL中的stable_sort通过开辟一个缓冲数组来解决这个问题。如果开辟缓冲数组失败,就会调用内部的inplace_stable_sort函数进行排序;如果有足够的空间,就会执行归并操作。\[1\] 另外,STL中的归并排序在底层使用了插入排序。它先调用chunk_insertion_sort函数对每个长度为chunk_size的子区间进行插入排序,然后再进行归并操作。\[3\] 总结起来,C++的stable_sort是一种稳定排序算法,基于归并排序实现。它适用于对比较复杂的数据进行排序,时间复杂度为O(NlogN),空间复杂度为O(N)。在STL中,stable_sort的实现使用了缓冲数组和插入排序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [C++编程之stable_sort](https://blog.csdn.net/sinat_22336563/article/details/72630655)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值