排序算法学习(5)

来源:互联网 发布:用友软件凭证打印 编辑:程序博客网 时间:2024/05/16 16:40

1. 将2个各有N个元素的有序表归并成一个有序表,其最少的比较次数是:N

分析:归并排序最少比较N,最多比较2N-1.

当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n次。

 

分析二:A(a0,a1,...aN)、B(b0,b1,...bN)为长度为N的有序表。
假设A中元素都比B中要小,则先比较N次将A中元素取完,然后再依次取B中元素。所以,最小比较次数为N。

 

2. 在下列排序方法中,(D)方法可能出现这种情况,在最后一趟开始之前,所有元素都不在其最终应在的正确位置上。

A快排   B冒泡     C 堆排序   D 插入

分析:插入排序中, 如果最后一个数最小, 前面所有的数字都要移动位置。

 

3. 用邻接表表示图时,拓扑排序算法时间复杂度为O(N+E)

分析:严蔚敏的书上算法、分析。

求各顶点入度的时间复杂度是O(e),即边的个数。

建零入度顶点栈的时间复杂度是O(n),即顶点的个数。

每个顶点都需要进一次栈,出一次栈,然后把入度减一。执行的总次数也是边的个数。所以时间复杂度是O(n+e)

 

分析二:增设一个存储入度的数组,一个用以组织入度为0的节点的栈S,则每个节点都需要入栈一次,一共n次,每个节点入度减1的操作一共e次,因此为O(n+e)。

 

4. 以下哪种排序算法需要开辟额外的存储空间?

A 选择排序B 归并排序    C快排     D堆排序

概念: 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

特点: 归并排序的最好、最坏和平均时间复杂度都是 O(nlogn),而空间复杂度是 O(n), 比较次数介于(nlogn)/2和(nlogn)-n+1,赋值操作的次数是(2nlogn)。

点评: 归并排序算法比较占用内存,但却是效率高且稳定的排序算法。

 

分析:需要额外空间的排序算法:

*桶排序 (bucketsort)— O(n);需要O(k)额外空间

*计数排序 (countingsort)— O(n+k);需要O(n+k)额外空间 

*合并排序 (mergesort)— O(n log n);需要O(n)额外空间 

*二叉排序树排序 (Binarytree sort)— O(n log n)期望时间 ;O(n²)最坏时间;需要O(n)额外空间 

*基数排序 (radixsort)— O(n·k);需要O(n)额外空间

 

5.为实现快排算法,待排序序列宜采用的存储方式是:顺序存储。

原创粉丝点击