排序算法学习(4)

1. 对下列关键字序列用快排进行排序时,速度最快的情形是(A)

A{21,25,5,17,9,23,30}

B{25,23,30,17,21,5,9}

C{21,9,17,30,25,23,5}

D{5,9,17,21,23,25,30}

分析:pivotkey的选择越靠近中央,即左右两个子序列长度越接近,排序速度越快。
21
正好是序列的正中,所以排除B,D。
A经过一次排序后结果为9,17,5,(21),25,23,30
C经过一次排序后结果为5,9,17,(21),25,23,30
对于子序列9,17,5和5,9,17,后者在有序状态下用快速排序方法的速度没有前者快,答案为A。

 

pivotkey的选择越靠近中央,即左右两个子序列长度越接近,排序速度越快。一般第一个数作为基准。

 

2. 个数约为50k的数列需要从小到大排序,数列特征是基本逆序(多数数字从大到小,个别乱序),以下哪种排序算法在事先不了解数列特征的情况下性能大概率最优(不考虑空间限制):堆排序。

分析:个数约为50K,基本可以秒杀一般的`冒泡`,`改进冒泡`,`选择`,`插入`等基本的排序。加上数列的特征是基本逆序,而快速排序的worst case就是基本逆序或者基本有序的情况。综上所述,堆排序应该是大概率最优的。

堆排序与初始数列次序无关。

 

3. 将一组无序的正整数重新排列成有序序列,其方法有:BCD

A拓扑排序 B快排      C堆排序    D基数排序

分析:在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。

每个顶点出现且只出现一次;

若A在序列中排在B的前面,则在图中不存在从B到A的路径。

也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。

 

拓扑排序是图中判断是否有环的算法,在图中查找一个无环的所有的节点,不是用来数据排序的。

 

4. 下列排序法中,每经过一次元素的交换会产生新的逆序的是(A

A 快排 B 冒泡     C 简单插入排序      D 简单选择排序

分析:在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之为存在一个逆序。冒泡排序只交换相邻元素,但不是每次移动都产生新的逆序。简单插入排序每一次比较后最多移掉一个逆序。快速排序每一次交换移动都会产生新的逆序,因为当不会有新的逆序产生时,本轮比较结束。简单选择排序的基本思想是先从所有 n 个待排序的数据元素中选择最小的元素,将该元素与第一个元素交换,再从剩下的 n-1 个元素中选出最小的元素与第 2 个元素交换,这样做不会产生逆序。故本题答案为 A 选项。

 

5. 排序时,若不采用计数排序等科技换时间的方法,合并m个长度为n的已排序数组的时间复杂度最优为:O(mn(logm))

分析:合并m个长度为n的已排序数组的时间复杂度为O(nmlogm)。思路是:首先将m个已排序数组的第一个数,建立大小为m的小根堆,时间复杂度O(m)。然后每次输出堆顶的数,再将其所属已排序数组的后一个数放入堆顶,调节小根堆。因为我们有m*n个数,小根堆调整时间为O(logm),所以时间复杂度O(nmlogm)。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值