种排序算法总结subsir

排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。   主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三、插入排序——将下一个插入已排好的序列中 四、壳(Shell)排序——缩小增量 五、归并排序 六、快速排序 七、堆排序 八、拓扑排序 九、锦标赛排序 十、基数排序      一、冒泡(Bubble)排序

原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。

要点:设计交换判断条件,提前结束以排好序的序列循环。

二、选择排序

原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。

三、插入排序

原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。

要点:设立哨兵,作为临时存储和判断数组边界之用。

四、壳(Shell)排序——希尔排序——缩小增量排序

原理:先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。

要点:增量的选择以及排序最终以1为增量进行排序结束。

五、归并排序

原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。

要点:归并、分治

六、快速排序

原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。

要点:递归、分治

七、堆排序

原理:利用大根堆或小根堆思想,首先建立堆,然后将堆首与堆尾交换,堆尾之后为有序区。要点:建堆、交换、调整堆

最大堆:后者任一非终端节点的关键字均大于或等于它的左、右孩子的关键字,此时位于堆顶的节点的关键字是整个序列中最大的。 思想: (1)令i=l,并令temp= kl ; (2)计算i的左孩子j=2i+1; (3)若j<=n-1,则转(4),否则转(6); (4)比较kj和kj+1,若kj+1>kj,则令j=j+1,否则j不变; (5)比较temp和kj,若kj>temp,则令ki等于kj,并令i=j,j=2i+1,并转(3),否则转(6) (6)令ki等于temp,结束。

八、拓扑排序 例 :学生选修课排课先后顺序 拓扑排序:把有向图中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程。 方法: 在有向图中选一个没有前驱的顶点且输出 从图中删除该顶点和所有以它为尾的弧 重复上述两步,直至全部顶点均已输出(拓扑排序成功),或者当图中不存在无前驱的顶点(图中有回路)为止。

九、锦标赛排序 锦标赛排序的算法思想与体育比赛类似。     首先将n个数据元素两两分组,分别按关键字进行比较,得到n/2个比较的优胜者(关键字小者),作为第一步比较的结果保留下来,     然后对这n/2个数据元素再两两分组,分别按关键字进行比较,…,如此重复,直到选出一个关键字最小的数据元素为止。

十、基数排序 基数排序又被称为桶排序。与前面介绍的几种排序方法相比较,基数排序和它们有明显的不同。     前面所介绍的排序方法都是建立在对数据元素关键字进行比较的基础上,所以可以称为基于比较的排序;     而基数排序首先将待排序数据元素依次“分配”到不同的桶里,然后再把各桶中的数据元素“收集”到一起。 通过使用对多关键字进行排序的这种“分配”和“收集”的方法,基数排序实现了对多关键字进行排序。 ——————————————————————————————————————— 例:     每张扑克牌有两个“关键字”:花色和面值。其大小顺序为:     花色:§<¨<©<ª     面值:2<3<……<K<A     扑克牌的大小先根据花色比较,花色大的牌比花色小的牌大;花色一样的牌再根据面值比较大小。所以,将扑克牌按从小到大的次序排列,可得到以下序列:  §2,…,§A,¨2,…,¨A,©2,…,©A,ª2,…,ªA     这种排序相当于有两个关键字的排序,一般有两种方法实现。     其一:可以先按花色分成四堆(每一堆牌具有相同的花色),然后在每一堆牌里再按面值从小到大的次序排序,最后把已排好序的四堆牌按花色从小到大次序叠放在一起就得到排序的结果。 其二:可以先按面值排序分成十三堆(每一堆牌具有相同的面值),然后将这十三堆牌按面值从小到大的顺序叠放在一起,再把整副牌按顺序根据花色再分成四堆(每一堆牌已按面值从小到大的顺序有序),最后将这四堆牌按花色从小到大合在一起就得到排序的结果。 ——————————————————————————————————————— 实现方法:   最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。   最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。

THE END
0.NOI大纲文字收藏版3. 排序算法 ·【5】归并排序 ·【5】快速排序 ·【6】堆排序 ·【6】树形选择排序(锦标赛排序) ·【5】桶排序 ·【6】基数排序 4. 字符串相关算法 ·【5】字符串匹配算法——KMP 5. 搜索算法 ·【6】搜索的剪枝优化 ·【6】记忆化搜索 ·【7】启发式搜索 ·【7】双向宽度优先搜索 ·【7】迭代jvzq<84yyy4489iqe0ipo8hqpvkov87312?1385217927h>;57=549:0ujznn
1.数据结构之树形选择排序(锦标赛排序)锦标赛排序也叫树形选择排序,是一种按照锦标赛的思想进行选择的排序方法,该方法是在简单选择排序方法上的改进。简单选择排序,花费的时间大部分都浪费在值的比较上面,而锦标赛排序刚好用树保存了前面比较的结果,下一次比较时直接利用前面比较的结果,这样就大大减少比较的时间,从而降低了时间复杂度,由O(n^2)降到O(jvzquC41dnuh0lxfp0tfv8qkjcu28::525:11jwvkerf1mjvckrt1@=;5::15
2.漫画:什么是“锦标赛排序”?漫画:什么是 “锦标赛排序” ? [导读]你了解选择排序吗? ——— 第二天 ——— ——— 如图中所示,我们把原本的冠军选手5排除掉,在四分之一决赛和他同一组的选手6就自然获得了直接晋级。 接下来的半决赛,选手7打败选手6晋级;在总决赛,选手7打败选手3晋级,成为了新的冠军。 因此我们可以判断出,选手7是总jvzquC41yy}/4:ne0eun1jwvkerf1A=:93?/j}rn
3.漫画:什么是“锦标赛排序”?接下来的半决赛,选手7打败选手6晋级;在总决赛,选手7打败选手3晋级,成为了新的冠军。 因此我们可以判断出,选手7是总体上的亚军。 假如给定如下数组,要求从小到大进行升序排列: 第一步,我们根据数组建立一颗满二叉树,用于进行“锦标赛式”的多层次比较。数组元素位于二叉树的叶子结点,元素数量不足时,用空结点补齐。jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1B5655:
4.快速排序本页面将简要介绍快速排序。定义 快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称「快排」,是一种被广泛运用的排序算法。基本原理与实现 过程 快速排序的工作原理是通过 分治 的方式来将一个数组排序。快速排序分为三个过程:将jvzq<84qk/}jmr3eqo5cc|ne1s{jet2uqtz0
5.14.8树形选择排序·LeetCode算法练习个人总结(Java)·看云14.8 树形选择排序(堆排序前身) 基本概念: 树形选择排序(Tree Selection Sort),又称锦标赛排序(Tournament Sort),也可以算得上堆排序的前身,是一种按照锦标赛思想进行选择排序的方法。它是根据节点的大小, 建立树, 输出树的根节点, 并把此重置为最大值, 再重构树,因为树中保留了一些比较的逻辑, 所以减少了jvzquC41yy}/mjsenq{e0ls1ocrjorsi1nkfvltfg1=54B:3
6.希尔排序,⌊log2⁡n⌋}(从大到小),则希尔排序算法的时间复杂度为 𝑂(𝑛3/2)O(n3/2)。 命题2 若间距序列为 𝐻 ={𝑘 =2𝑝 ⋅3𝑞 ∣𝑝,𝑞 ∈ℕ,𝑘 ≤𝑛}H={k=2p⋅3q∣p,q∈N,k≤n}(从大到小),则希尔排序算法的时间复杂度为 𝑂(𝑛log2⁡𝑛)O(nlog2⁡n)。jvzquC41qk3xktn0qtm0djxke1yiguq/uqxu1
7.数据结构求答案单选题第1题(2)分排序趟数与序列的原始状态有时间复杂性为O(nlog2n)且空间复杂性为O(1)的排序方法是( )。 A、归并排序 B、堆排序 C、快速排序 D、锦标赛排序 第15题 (2) 分 要将现实生活中的数据转化为计算机所能表示的形式,其转化过程依次为( )。 A、逻辑结构、存储结构、机外表示 B、存储结构、逻辑结构、机外表示 C、机外表示、逻辑结构、存储结构 DjvzquC41yy}/|‚gcpi4dqv4swgyukxs1::9fhj89d3jg9kf:3d:9h=fhc5?9d;=f0jznn
8.中国石油大学数据结构试题及答案C 锦标赛排序 D 快速排序 6、设有两个串t和p,求p在t中首次出现的位置的运算叫做()。 A 求子串 B 模式匹配 C 串替换D 串连接 7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数组至少需要的存储字数是()jvzquC41o0972mteu0tfv8iqe1>43<>7;7<70qyon
9.经典排序算法详解对象的移动次数不超过关键码的比较次数,所以锦标赛排序总的时间复杂度为O(nlog2n)。 多了附加存储。如果有 n 个对象,必须使用至少 2n-1 个结点来存放胜者树。 稳定 6、堆排 堆排序分为两个步骤:第一步,根据初始输入数据,利用堆的调整算法 FilterDown( ) 形成初始堆,第二步,通过一系列的对象交换和重新调jvzquC41dnuh0lxfp0tfv8~wejkoiuncpanbry~1ctzjeuj1fgzbkux174945@=9
10.Python选择排序中的树形选择排序python选择排序里面主要讲了三个排序,分别是简单选择排序、树形选择排序、堆排序。今天这篇文章主要讲树形选择排序,树形选择排序也被称为锦标赛排序,树形选择排序运用了锦标赛的思想进行排序,树形选择排序是指首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。jvzquC41yy}/lk:30pku1jwvkerf1;7;72?/j}r