31. 了解各种与排序有关的选择
排序算法有如下:
- sort、stable_sort
- partial_sort、无对应的稳定排序算法
- nth_element、无对应的稳定排序算法
- partition、stable_partition
sort、stable_sort、partitial_sort、nth_element
算法都要求随机访问迭代器,所以这些算法都只能被应用于vector、string、deque和数组。对标准关联容器中的元素进行排序并没有实际意义,因为这样的容器总是使用比较函数来维护内部元素的有效性。list是唯一需要排序却无法使用这些排序算法的容器,为此,list特别提供了sort成员函数。(有趣的是,list::sort执行的是稳定排序)。
如果希望对一个list进行完全排序,那可以用sort成员函数来做到这一点;但是,如果需要对list中的对象使用partial_sort或者nth_elment算法的话,你就只能通过间接途径来完成了。
- 将list中的元素拷贝到一个提供随机访问迭代器的容器中,然后对该容器执行你所期待的算法;
- 先创建一个list::itrator的容器,再对该容器执行相应的算法,然后通过其中的迭代器访问list的元素。
- 利用一个包含迭代器的有序容器中的信息,通过返回调用splice成员函数,将list中的元素调整到期望的目标位置。
与sort、statble_sort、partial_sort、nth_element不同的是,partition
和stable_partition
只要求双向迭代器技能完成工作。
总结一下:
- 如果需要对vector、string、deque或者数组中的元素执行一次完全排序,可以使用sort、stable_sort。
- 如果有一个vector、string、deque或者数组,并且只需要对等价性最前面的n个元素进行排序,那么可以使用partial_sort。
- 如果有一个vector、string、deque或者数组中,并且需要找到第n个位置上的元素,或者,需要找到等价性最前面的n个元素但又不必对这n个元素进行排序,那么nth_element正是你需要的函数。
- 如果需要将一个标准序列容器中的元素是否满足某个特定的条件区分开来,那么partition、stable_partition可能正是你需要的。
- 如果你的数据在一个list中,那么你依然可以直接调用partition、stable_partition算法;你可以用list::sort来代器sort和stable_sort算法。但是,如果你需要获取partial_sort或nth_element算法的效果,那么,正如前面提到的那样,你可以有一些间接的途径来完成这项任务。
总的来说,算法所做的工作越多,它需要的时间也越多;稳定的排序算法要比哪些忽略稳定性的算法更为耗时。建议是对排序算法的选择应该更多地基于你所完成的功能,而不是算法的性能。如果你选择的算法恰好能完成你所需要的功能,那么多数情况下,这不仅可以使你的代码更加清晰,而且也是用STL来完成相应功能最有效的途径。
31. 了解各种与排序有关的选择相关推荐
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- [Android精品源码] Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
Material Design中文版Code4APPPHP100UI4APP 开启辅助访问设为首页收藏本站快捷导航切换到宽版切换风格 石刚 | |我的 |签到打卡 |设置 |消息 |提醒(2) |退出 ...
- 排序算法-简单选择排序
文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...
- 让Asp.NET的DataGrid可排序、可选择、可分页
'*************************************************************** 'Author: 李洪根 'MAIL: lihonggen0@gci- ...
- python八大选择排序_Python实现选择排序
选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 .它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...
分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中按照从小到大的顺序进行排序. 本站收录这篇文章php中常用的4种实现数字大小排序的冒泡选择等算法函数代码,详细解说文章中相关排序 冒泡 ...
- python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...
本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...
最新文章
- 云原生微服务技术趋势解读
- win32应用程序_电脑打不开exe程序|Win10提示exe不是有效32应用程序
- 5、位运算符(7个):实例
- linux shell编程多线程和wait命令学习
- wxpython实例源码_wxpython中复选框的基本使用源码实例
- 1.JUC锁的一些概念
- 树莓派控制台达伺服控制器
- python 移动文件或文件夹操作
- 相关系数(Correlation)
- 设置selected选中的多种方法(总结)
- ansible:变量调用set_fact和register
- unity物体自身轴旋转_unity3d如何实现物体自动旋转-unity3d物体自动旋转的设置教程 - 河东软件园...
- 交换机MAC地址表的形成过程动态演示
- 基于Openwrt 拨号上网(SDX55) (PCIe)移植文档
- 学生-课程数据库中的Student表中的学号属性为什么用英文Sno表示?
- uoj311 【UNR #2】积劳成疾
- 2.24-2.28的fsop
- 最常见的20道jQuery经典面试题
- php 中日期时间函数大全,PHP 中日期时间函数 date() 用法总结
- 用Python量化海龟交易法则
热门文章
- [原创]markdown语法学习(commonmark)
- 统计分析与R软件-chapter2-4
- #题目:有10 台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次...
- dojo/dom-class源码学习
- BUG: button点击高亮延迟问题
- C语言的变量的作用域和生存期
- 14.凤凰架构:构建可靠的大型分布式系统 --- 资源与调度
- 12.Vim 打造成 PHP 开发环境
- 145. PHP header status code
- 2.tcpdump(1)