算法与数据结构 第七章 内排序(详解)

目录

一、判断题

二、选择题


希尔排序:图解排序算法(二)之希尔排序 - dreamcatcher-cx - 博客园

直接选择排序:排序五 简单选择排序 - 静默虚空 - 博客园

直接插入排序:排序算法系列之直接插入排序_kolin胡的博客-CSDN博客_直接插入排序

归并排序:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园

快速排序:快速排序法(详解)_李小白~的博客-CSDN博客_快速排序

堆排序:堆排序

一、判断题

1、对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。F

解析:元素基本有序时不交换。

2、对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)。F

解析:应该为O(n)。

 3、要从50个键值中找出最大的3个值,选择排序比堆排序快。T

解析:规模较小直接选择排序快。

4、仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。T

解析:下界,所谓“下界”, 顾名思义就是对于一个长度为n的序列所需要的最少比较次数。

最优下界,什么时候最优?决策树从根节点到叶节点的最短长度为n-1,既长度为n的序列本身就是有序(序列从左到右,以升序表示为有序)时就是最优情况,冒泡排序和直接插入法在最优情况下时间复杂度就是o(n)。

最坏下界,什么时候最坏?决策树从根节点到叶节点的长度为log(n!),既从根节点至少需要log(n!)次比较才能到叶节点。当n很大时根据斯特林公式log(n!)=nlogn,既最坏情况下时间复杂度下界为O(nlogn)。

二、选择题

1、就平均性能而言,目前最好的内排序方法是()排序法。

A.交换

B.希尔

C.冒泡

D.快速

解析:快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。若要求排序稳定,则可选用归并排序。

经过实验,会发现相同的数据规模,快速排序比堆排序的效率高很多,并且随着数据规模的扩大,二者的差距不断扩大,快速排序的优势越来越明显。快速排序的时间复杂度近似线性增长,堆排序则要大很多。究其原因,应该有以下几个方面:

在堆排序(小根堆)的时候,每次总是将最小的元素移除,然后将最后的元素放到堆顶,再让其自我调整。这样一来,有很多比较将是被浪费的,因为被拿到堆顶的那个元素几乎肯定是很大的,而靠近堆顶的元素又几乎肯定是很小的,最后一个元素能留在堆顶的可能性微乎其微,最后一个元素很有可能最终再被移动到底部。在堆排序里面有大量这种近乎无效的比较。

堆排序的过程中,需要有效的随机存取。比较父节点和字节点的值大小的时候,虽然计算下标会很快完成,但是在大规模的数据中对数组指针寻址也需要一定的时间。而快速排序只需要将数组指针移动到相邻的区域即可。在堆排序中,会大量的随机存取数据;而在快速排序中,只会大量的顺序存取数据。随着数据规模的扩大,这方面的差距会明显增大。在这方面的时间开销来说,快速排序只会线性增长,而堆排序增加幅度很大,会远远大于线性。

在快速排序中,每次数据移动都意味着该数据距离它正确的位置越来越近,而在堆排序中,类似将堆尾部的数据移到堆顶这样的操作只会使相应的数据远离它正确的位置,后续必然有一些操作再将其移动,即“做了好多无用功”。

快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。若要求排序稳定,则可选用归并排序。

2、对于 10 个数的简单选择排序,最坏情况下需要交换元素的次数为:

A.45

B.100

C.9

D.36 

解析:对于简单选择排序,无论最好最坏都要交换N-1次。

 3、对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15},则采用的是()排序法。

A.希尔

B.快速

C.选择

D.冒泡

解析:增量为3的希尔排序。

4、设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是:

A.500

B.10

C.999

D.100

解析:1000介于2的9次方和2的10次方之间,取最大为10。

5、对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-l,4,8,20,9,7}则该次采用的增量是()。

A.3

B.1

C.4

D.2

解析:9和-1替换,7和4替换,增量为4。

6、对于7个数进行冒泡排序,需要进行的比较次数为:

A.49

B.14

C.7

D.21

解析:6+5+4+3+2+1=21。

7、若数据元素序列{ 12, 13, 8, 11, 5, 16, 2, 9 }是采用下列排序方法之一得到的第一趟排序后的结果,则该排序算法只能是:

A.堆排序

B.快速排序

C.归并排序

D.选择排序

解析:

8、对初始状态为递增序列的表按递增顺序排序,最费时间的是()算法。

A.快速排序

B.堆排序

C.归并排序

D.插入排序

解析:

堆排序:最好最坏都是nlogn;

快排:最好情况一趟比较可以划分两等份nlogn 最坏相对有序n*n;

插入:最好相对有序n;

归并:最好最坏都是nlogn。

9、若数据元素序列{ 11,12,13,7,8,9,23,4,5 }是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是:

A.冒泡排序

B.归并排序

C.插入排序

D.选择排序

解析:

从题中可以看出,只有前三个数有序,所以是进行了两趟插入排序。

上面的题目均是博主在期末考试前总结的重难点,欢迎各位大佬指正错误或者给出更优质的解析。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于数据结构、内部算法排序课程设计的建议。 首先,您需要确定该课程设计的目标和学习内容。您可以考虑以下几个方面: 1. 数据结构的基本原理和常用数据结构,如线性表、栈、队列、树、图等。 2. 内部算法的基本概念和分类,如贪心算法、分治算法、动态规划算法等。 3. 排序算法的基本原理和分类,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。 4. 采用的编程语言和开发工具,如C++或Java编程语言,Visual Studio或Eclipse开发工具等。 5. 可能遇到的问题和解决方案,如算法复杂度分析、算法实现错误、排序算法优化等。 接下来,您可以根据以上考虑的内容,制定课程设计的详细计划。以下是一个可能的课程设计计划: 1. 第一周:介绍数据结构的基本原理和常用数据结构,讲解线性表、栈、队列、树、图等数据结构的实现和应用。 2. 第二周:学习内部算法的基本概念和分类,讲解贪心算法、分治算法、动态规划算法算法的实现和应用。 3. 第三周:介绍排序算法的基本原理和分类,讲解冒泡排序、选择排序、插入排序、快速排序、归并排序排序算法的实现和应用。 4. 第四周:实现一个基于数据结构和内部算法的实际应用,如一个简单的迷宫求解器或文本编辑器。 5. 第五周:总结和回顾整个课程设计的过程,讨论可能的改进和优化方案。 希望这些建议能够对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值