数据结构-排序

算法-排序:插入培训、交换排序、选择排序、二路归并排序、基数排序、外部排序、排序算法的应用和分析
摘要由CSDN通过智能技术生成

排序

在这里插入图片描述

排序的基本概念

算法的稳定性:若待排序表中有两个元素相等,排序后他俩的顺序保持不变。
判断排序算法好坏的标准是时间复杂度和空间复杂度。

1.插入排序

直接插入排序

在这里插入图片描述
在这里插入图片描述

折半插入排序

前面有序序列查找插入位置时采用折半查找的方法
在这里插入图片描述

希尔排序

不稳定算法
顺序存储
在这里插入图片描述

2.交换排序

冒泡排序

在这里插入图片描述

快速排序

不稳定顺序存储
中心点,pivot:可以是第一个数、最后一个数、最中间一个数、任选一个数等。
每一趟排序都是把一个元素放到最终位置。
在这里插入图片描述
方法一:从左往右写的同时从右往左写,最后写中间的值pivot key
在这里插入图片描述
方法二:加一个哨兵,low指向第一个,high指向最后一个,将第一个放到哨兵的位置,然后从右边找小的放左边空的,然后从左边找大的放右边,依次交替,直至low=high,将哨兵位置的放到low位置上,第一趟完成,左右子表再递归,直至表中元素就一个元素。
在这里插入图片描述

3.选择排序

每一趟循环会把一个元素放到最终位置上。

直接选择排序

不稳定 顺序存储链式存储

  1. 通过n-1次关键字比较,从n个记录中找到最小的记录,将它与第一个记录交换。
  2. 再通过n-2次关键词比较,从剩余的n-1个记录中找出关键字次最小的记录,将它与第二个记录交换。
  3. 重复上述操作,共进行n-1趟排序后,排序结束。

选最小值的方法类似于打擂台,谁小谁上去。

在这里插入图片描述

堆排序

定义:若n个元素的序列{a1,a2…an}满足

  • ai ≤ a2i
  • ai ≤ a2i+1

小根堆(如果是≥则是大根堆)
由堆的定义可以看出,堆实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点。如图为小根堆。
小根堆
堆排序定义:
若在输出堆顶的最小(大)值后,是的剩余n-1个得序列又重建一个堆,再取次小(大)值…如此反复,便能找到一个有序序列,这个过程称为堆排序。

堆的调整

小根堆

  1. 输出堆顶元素后,以堆中最后一个元素替代之。
  2. 然后将根节点与左右子树的根节点进行比较,并与其中小者进行交换
  3. 重复上述操作,直至叶子结点,将得到新的堆,这个过程称为“筛选”。

在这里插入图片描述

堆的建立

堆实质上是一个线性表,那么可以顺序存储一个堆。
在这里插入图片描述

4.归并和基数排序

归并排序

在这里插入图片描述
在这里插入图片描述

基数排序

不基于比较,借助“分配”和“收集”两种操作对单逻辑关键字进行排序,分为最高位优先(MSD)和最低位优先(LSD)。
在这里插入图片描述

5.内部排序算法的比较和应用

排序算法比较

在这里插入图片描述

排序算法应用

  1. 若n较小(小于50)时,可采用直接插入排序或简单选择排序;若较大时,采用快排、堆排序、归并排序
  2. 若n很大,记录关键字位数较少且可分解,采用基数排序。
  3. 若初始基本有序,则采用直接插入或冒泡排序。
  4. 当记录元素比较大时,应避免大量移动的排序算法,尽量采用链式存储。

6.外部排序

外部排序通常采用归并排序方法
在这里插入图片描述

失败数

优化IO次数

置换选择排序

最佳归并树

在这里插入图片描述
带权路径长度之和为归并过程中的总读记录数
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值