我是靠谱客的博主 甜美红牛,最近开发中收集的这篇文章主要介绍算法与数据结构 第七章 内排序(详解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、判断题

二、选择题


希尔排序:图解排序算法(二)之希尔排序 - 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.选择排序

解析:

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

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

最后

以上就是甜美红牛为你收集整理的算法与数据结构 第七章 内排序(详解)的全部内容,希望文章能够帮你解决算法与数据结构 第七章 内排序(详解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部