排序算法学习(1)

来源:互联网 发布:mac virtualbox装win7 编辑:程序博客网 时间:2024/06/06 00:26

1、       在外部排序时,利用选择树方法在能在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。(正确。归并排序是将两个长度相当序列合并成一个序列,初始序列长度为m,那么合并之后的平均长度为2m

2、       已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界为:O(n log2 n)

分析:组间已经排好序,只需对组内元素进行排序即可。组内K个元素使用比较排序,时间下界为O(k log2 k),一共n/K组,所有O(k log2 k *n/k)=O(n log2 k);

求:求时间下限,即时间复杂度最低,效率最高的算法。
已知:1、组与组之间是有序的,不考虑,类似归并。2、每个组内是无序的,需要选择最优的排序时间复杂度O(nlog 2 n) ,
求解:对于一个组中的k个元素来说,时间复杂度为O(klog 2 k);对于n/k个组来说,时间复杂度 O(klog 2 k * n / k) = O(nlog 2 k).

 

3、       如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用堆排序最快。

分析:堆排序构造堆为线性时间,取前5 5*log 2(1000)的时间。

可以构建一共大小为kk为前k个数)的小顶堆,线性扫描整个序列O(n),如果值小于小顶堆的堆顶元素,则不作处理;如果大于堆顶元素,用这个值替换堆顶元素,并更新小顶堆O(log k),所以复杂度为 O(n log k),接近线性。

 

4、       采用简单选择排序,比较次数与移动次数分别为O(N*N),O(N).

选择排序

定义:每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾;
特点:
(1)运行时间和输入无关,有序数组、主键全部相等的数组、随机排列的数组,三者排序时间相同,排序时间与输入的状态无关;
(2)数据移动,元素交换的次数等于元素的个数,一遍排序交换一对元素;
说明:算法的时间效率取决于比较的次数,下标从0到N-1的任意元素都会进行一次交换和N-1-i次比较。

 

5、       利用归并排序方法对数字序列:5,19,17,21,11,8,1进行排序,共需要进行:11次比较。

 

 

原创粉丝点击