软考29-上午题-【数据结构】-排序

一、排序的基本概念

1-1、稳定性

稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后,次序不变,则是稳定的。

1-2、归位

每一趟排序能确定一个元素的最终位置

1-3、内部排序

排序记录全部存放在内存中进行排序的过程。

1-4、外部排序

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

1-5、排序小结(要背)

​​​​​​​

比较最好时间复杂度,会发现,当待排序的序列基本有序的话,适合采用:

  • 直接插入排序:O(n)
  • 希尔排序
  • 冒泡排序 

注意:

数据基本有序的时候,快速排序最坏的情况:O(n^2)。

二、直接插入排序

第一趟排序:将第一个和第二个关键字进行比较,

第二趟排序:将第三个关键字和前面已经排好序的两个关键字进行比较;

......

不可能在第一趟排序就确定某个关键字的最终位置。

稳定的 

不归位

三、希尔排序

直接插入排序的改进。

基本思想:现将整个待排记录序列分割若干子序列,然后分别进行直接插入排序;待整个序列中的记录基本有序的时候,再对全体记录进行一次直接插入排序。

示例:

不稳定

不归位 

四、直接插入排序-真题

真题1:

真题2:

 真题3:

关键字基本有序:直接插入排序! 

真题4:

五、简单选择排序

算法思想:从待排数组中找到最小值,再将最小值与已排好序的数组后一位进行交换。

在第一趟排序就确定某个关键字的最终位置。

归位

不稳定 

六、堆排序(简单了解) 

示例:

此时,根元素80是最大的元素,将根元素80和队列最后一个元素10交换,并将80脱离当前序列(归位),此时,新的二叉树不满足大顶堆的规则,则继续调整。

每次调整完得到的根节点都是当前序列的最大元素!!!(归位)

在第一趟排序就确定某个关键字的最终位置。(堆顶)

归位

不稳定

七、真题2

真题1:

 

直接插入排序:稳定

简单选择排序:不稳定

真题2:

八、冒泡排序

基本思想:相邻两个元素,俩俩交换

稳定

归位 

九、快速排序

快速排序首先选择了一个基准值,然后分别选择两个指针在数组中一个找大,一个找小,然后进行交换。

通过一趟排序将待排序的记录以基准值为分界,分为独立的两个部分,称为前半区和后半区;前半区均小于基准值,后半区均大于基准值。

然后再分别对这两个部分在进行快速排序,从而使得整个序列有序。

分治:分而治之。

在第一趟排序就确定某个关键字的最终位置。(枢轴元素)

归位

不稳定!!! 

纠错:空间时间复杂度是:O(log2n); 

快速排序,待排序列基本有序,则是最坏的情况

十、真题2

真题1:

真题2:

真题3:

真题4:

十一、归并排序

基本思想:归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的

示例:

 

设计方法:分治法

不可能在第一趟排序就确定某个关键字的最终位置。

不归并

稳定

平均时间复杂度 = 最好时间复杂度 = 最坏时间复杂度

11-1、真题

真题1:

真题2:

 真题3:

真题4:

真题5:

真题6:

十二、排序小结

12-1、简单排序

1、直接插入排序(稳定)

2、冒泡排序(稳定)

3、简单选择排序(不稳定)

时间复杂度都是:O(n^2)

空间复杂度:O(1)

12-2、希尔排序(不稳定)

时间复杂度:O(n^1.3)

空间复杂度:O(1)

12-3、快速排序(不稳定)

分治思想

时间复杂度:O(nlog2n)——性能最好

空间时间复杂度:O(log2n)

但是,当待排序列基本有序的时候,是最坏的情况,时间复杂度退化为:O(n^2)

12-4、堆排序(不稳定)

时间复杂度:O(nlog2n)

空间时间复杂度:O(1)

12-5、归并排序(稳定)

俩俩归并,n/2向上取整

整个归并排序,需要进行log2n趟(向上取整)

空间复杂度:O(n)

时间复杂度:O(nlogn)

12-6、小结-稳定的排序

  • 直接插入排序;
  • 冒泡排序
  • 归并排序

12-7、真题

真题1:

真题2:

真题3:

直接插入排序:局部有序

冒泡:每一趟排序,都将最大的泡泡在最后的位置。

归位的排序:

  • 冒泡排序
  • 简单选择排序(最小值)
  • 堆排序(最大值)
  • 快速排序(中间的值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值