计算机考研复试之常问问题篇(2)

这篇博客详细介绍了常见的排序算法,如冒泡排序、插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序、计数排序、桶排序和基数排序,以及查找算法,如顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找和哈希查找。此外,还讨论了最短路径算法(Dijkstra、Floyd、Bellman-Ford和SPFA)和最小生成树算法(Prim和Kruskal)。最后,提到了面向对象的特性,包括抽象、继承、封装和多态性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常问问题(2)

1. 你知道的排序算法

1)冒泡排序

从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来 找出剩余未排序数的中的最大数并“冒泡”至顶端。

稳定; 平均时间复杂度:O(n 2)
最好情况:顺序O(n);
最坏情况:逆序O(n2

好处:稳定,而且可以适用于单向链表----其它排序方法基本不行

2)插入排序

待排序的依次与已排序序列比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。

稳定; 平均时间复杂度:O(n 2)
复杂度应为(n+i) i为逆序对的个数 可知,对基本有序情况下效果好。
所以常常与其它排序方法结合,优化

折半插入排序,稳定,n^2复杂度

3)希尔排序(缩小增量排序):

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

不稳定;平均时间复杂度:希尔排序算法的时间复杂度分析比较复杂,实际所需的时间取决于各次排序时增量的个数和增量的取值。时间复杂度在O(n ^ 1.3)到O(n ^ 2)之间。

增量不互质时,小增量不起作用

4)选择排序

从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。

不稳定; 平均时间复杂度:O(n ^ 2)
(数组,交换 ----不稳定,可以稳定但需要额外的时/空 链表/新开)

5)快速排序

从待排序的n个记录中任意选取一个记录(通常选取第一个记录)为分区标准;(pivot 中枢)
把所有小于该排序列的记录移动到左边,把所有大于该排序码的记录移动到右边,中间放所选记录,称之为第一趟排序;
然后对前后两个子序列分别重复上述过程,直到所有记录都排好序。

不稳定; 平均时间复杂度:O(nlogn)

递归规模小的时候可用插入排序优化

有大量重复元素时退化
二路快排、三路快排

6)堆排序

建立堆,然后删除堆顶元素,同时交换堆顶元素和最后一个元素,再重新调整堆结构,直至全部删除堆中元素。(最大堆)

不稳定; 平均时间复杂度:O(nlogn)

7)归并排序

采用分治思想,现将序列分为一个个子序列,对子序列进行排序合并,直至整个序列有序。

稳定; 平均

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值