软考29-上午题-排序

一、排序的基本概念

1-1、稳定性

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

1-2、归位

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

1-3、内部排序

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

1-4、外部排序

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

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

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

  • 直接插入排序
  • 希尔排序
  • 冒泡排序 

二、直接插入排序

稳定的 

三、希尔排序

直接插入排序的改进。

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

示例:

四、真题1

真题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:

直接插入排序:局部有序

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 08:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 08:26:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 08:26:02       82 阅读
  4. Python语言-面向对象

    2024-02-19 08:26:02       91 阅读

热门阅读

  1. 常见的Web前端开发框架推荐

    2024-02-19 08:26:02       52 阅读
  2. 摆(行列式、杜教筛)

    2024-02-19 08:26:02       45 阅读
  3. Kubernetes基础(十八)-k8s存储对象Persistent Volume

    2024-02-19 08:26:02       39 阅读
  4. Eureka和Nacos

    2024-02-19 08:26:02       45 阅读
  5. 动态头部:统一目标检测头部与注意力

    2024-02-19 08:26:02       36 阅读
  6. 【C++搜索】DFS:拆分自然数

    2024-02-19 08:26:02       46 阅读
  7. leetcode第124场双周赛

    2024-02-19 08:26:02       46 阅读