软考中级(软件设计师)--数据结构基础之排序

1.排序:将一组杂乱无章的数据按一定的规律排列起来。

2.排序的目的:

  • 便于查找

3.排序算法的好坏如何衡量:

  • 时间效率–排序的速度
  • 空间效率–占内存辅助空间的大小
  • 稳定性–若 两个记录A和B的关键字值相等,但排序后A、B的先手次序保持不变,则称这种排序算法是稳定的。

4.排序分类:

内部排序:指待排序的记录全部存放在内存中排序的过程。
外部排序:指待排序记录的数量很大,以至内存不能容纳全部记录,在排序过程中尚需对外进行访问的过程。

5.排序方法:

  • 插入排序:
    直接插入排序;希尔排序
  • 选择排序
    直接选择排序;堆排序
  • 交换排序
    冒泡排序;快速排序
  • 归并排序

7.直接插入排序

先将序列中第1个记录看成一个有序子序列,然后从第二个记录开始,逐个经行插入、知道整个序列有序,排序过程为n-1趟插入。
时间效率:时间复杂度O(n^2);
空间效率:O(1)
算法稳定性:稳定

8.希尔排序

先取一个正整数d1<n,(n是排序的记录个数)把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直到di=1,即所有记录放进一个组中排序为止。
一般取d1=n/2, di+1=d1/2 如果结果为偶数,则加1.
希尔排序是不稳定排序方法。
在这里插入图片描述

9.选择排序:

每一次从待排序的数据元素中选出最小的一个元素,存放在已排序列的后面,直到全部待排序的数据元素排完。
优点:实现简单。
缺点:每趟只能确定一个元素,表长为N时需要n-1趟。
前提:顺序存储结构
分类:直接选择排序,堆排序。

10.直接选择排序

在所有记录中选出最小的记录,把它与第一个记录交换,然后在剩余的记录内选出最小的记录与第2个交换……以此类推。

在这里插入图片描述

11.堆排序:

堆是满足下列性质的数列{r1,r2……rn}
在这里插入图片描述
堆排序是利用堆的特性对记录序列进行排序的一种排序方法。
将无序序列建成一个堆,得到关键字最小(或最大)的记录;输出堆顶的最小(大)值后,使剩下n-1个元素又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫做堆排序。
在这里插入图片描述
堆排序的最坏时间复杂度为O(nLog2n),堆排序的平均性能接近最坏性能。堆排序的辅助空间为O(1)。

12.交换排序

交换排序的基本思想是两两比较待排序记录的关键码,如果发生逆序(排序顺序与排序后的次序相反),则交换之,直到所有记录都排好序为止。
交换排序的主要算法有:冒泡排序和快速排序。

13.冒泡排序:

基本思路:每趟不断将记录两两比较,并按‘前小后大’(或者‘前大后小’)规则交换。
在这里插入图片描述
最好情况:初始排列已有序,只执行一趟气泡,做n-1次关键码比较,不移动对象。
最坏情形:初始排列逆序,要执行n-1趟起泡。
时间小路:O(n^2) 因为要考虑最坏情况。
空间效率:O(1) 只在交换时用到一个缓存单元
稳定性:稳定

14.快速排序

从待排序列中任取一个元素,作为中心,所有比它小(或相等)的元素一律放前,所有比它大的元素一律放后,形成左右两个子表。再对各个子表重新选择中心元素并按此规则调整,直到每个子表的元素只剩一个。
优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加。
前提:顺序存储结构。
在这里插入图片描述
最坏时间复杂度O(n^2),最好时间复杂度为O(nlog2n),是不稳定的。

15.归并排序

可以把一个长度为N的无序序列看成n个长度为1的有序子序列,首先做两两归并,得到n/2个长度为2的有序子序列;再做两两归并,如此重复,直到最后得到一个长度为N的有序序列
在这里插入图片描述
时间复杂度:O(nlog2n);空间复杂度:O(n) 是稳定的。

比较

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值