【C++】各种排序涉及到的选择小题合集(每日小细节009)

昨天更新完各种排序之后今天来检验一下是否真的全部掌握了呢?

今天的合集里面包括各种排序的综合选择题和一些解题技巧

花一两分钟看一下真的很有帮助哦

 

(最好能先认真复习一下各种排序


 

1. 

冒泡排序就是相邻元素的两两比较所以依次写出来就可以了

第一趟:456321——453621——453261——453216

第二趟:453216——435216——432516——432156

第三趟:432156——342156——324156——321456 

所以321456就是最后的结果 

 


 选择排序:假设第一个数据是最值,然后后面的数据依次和他比较,如果有更大或者更小则替换

计算比较次数的方法和冒泡排序一样,第一次有n-1个元素要进行比较,也就是n-1次

往后依次减少,每次减少1,首项是n-1 尾项1,项数n-1的等差数列

总次数N=(n-1+1)*(n-1)/2

所以该题答案清晰明了,100*99/2=4950

降序应该建小堆,通过建堆算法向下调整

5                                5                          2                   2

11    7         —— 2           7     ——5            7 ——3        7

2 3  17              11  3       17         11  3       17      5   11     17

所以结果就是2 3 7 5 11 17

题目的意思就是把28当做key,右面先找小,然后左边找大交换

28 16 32 12 60 2 5 72 

28 16 5  12   60  2 32 72

2  16  5  12  28  60  32  72

 

 这道题就需要知道每一趟快排之后的结果特点

每一次快排都会至少让一个元素确定位置

发现只有C

有序的时候应该是2345679 和选项对比发现就只有9在应在的位置上  所以错误

 

快排的额外空间就是logn 因为他是类似于二叉树(逻辑结构)一样的结构往下建立栈帧,树高度是n 所以额外的空间就是logn


判断对错: 

 

 A就是最初创造出三数取中的初衷,就是为了规避快排对接近有序的序列的极大浪费情况

B如果元素完全相同那还需要更优化的方法,这个方法在各类排序的博客里已经写过了

各种排序里面的

 

 C没问题就是三数取中的定义

D肯定不对,就像我在上篇博客里面说过的,叫做快排也不是最快的,就算是还有三数取中解决不了的B的问题


选错的 

非递归我们是用栈完成的,但是栈和队列根本就没有本质区别,甚至之前我们还一起做了栈和队列相互转化的oj,所以AB没大问题 

C非递归在时间复杂度上并没有很大的改善,但是在空间复杂度上就节省了特别多开辟栈帧的开销,退一步,如果真的非递归又节约时间还节约空间,那只学他不就行了

D根据C的分析,对的


还有个汇总

有很多考最好最坏,时间复杂度的题目在这里就不列举了

我们最直接用一张表说话

 

已经有序的情况下花费最多的是快排 


 

这个题目是一种新的排序方法(不在那片汇总的博客里)

这个是快排的二分排序思想

 


今天的内容就到这里,感谢 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值