当前位置: 首页 > 面试题库 >

请你说一说你知道的排序算法及其复杂度

任飞龙
2023-03-14
本文向大家介绍请你说一说你知道的排序算法及其复杂度相关面试题,主要包含被问及请你说一说你知道的排序算法及其复杂度时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

1、冒泡排序:

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

稳定性:稳定

平均时间复杂度:O(n ^ 2)

2、插入排序:

从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。

稳定性:稳定

平均时间复杂度:O(n ^ 2)

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

希尔排序法是对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。

希尔排序开始时增量较大,分组较多,每组的记录数目较少,故在各组内采用直接插入排序较快,后来增量di逐渐缩小,分组数减少,各组的记录数增多,但由于已经按di−1分组排序,文件叫接近于有序状态,所以新的一趟排序过程较快。因此希尔 排序在效率上比直接插入排序有较大的改进。

在直接插入排序的基础上,将直接插入排序中的1全部改变成增量d即可,因为希尔排序最后一轮的增量d就为1。

稳定性:不稳定

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

4、选择排序:

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

稳定性:不稳定

平均时间复杂度:O(n ^ 2)

5、快速排序

1)从待排序的n个记录中任意选取一个记录(通常选取第一个记录)为分区标准;

2)把所有小于该排序列的记录移动到左边,把所有大于该排序码的记录移动到右边,中间放所选记录,称之为第一趟排序;

3)然后对前后两个子序列分别重复上述过程,直到所有记录都排好序。

稳定性:不稳定

平均时间复杂度:O(nlogn)

6、堆排序:

堆:

1、完全二叉树或者是近似完全二叉树。

2、大顶堆:父节点不小于子节点键值,小顶堆:父节点不大于子节点键值。左右孩子没有大小的顺序。

堆排序在选择排序的基础上提出的,步骤:

1、建立堆

2、删除堆顶元素,同时交换堆顶元素和最后一个元素,再重新调整堆结构,直至全部删除堆中元素。

稳定性:不稳定

平均时间复杂度:O(nlogn)

7、归并排序:

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

稳定性:稳定

平均时间复杂度:O(nlogn)

8、计数排序:

思想:如果比元素x小的元素个数有n个,则元素x排序后位置为n+1。

步骤:

1)找出待排序的数组中最大的元素;

2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项;

3)对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);

4)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。

稳定性:稳定

时间复杂度:O(n+k),k是待排序数的范围。

9、桶排序:

步骤:

1)设置一个定量的数组当作空桶子; 常见的排序算法及其复杂度:

2)寻访序列,并且把记录一个一个放到对应的桶子去;

3)对每个不是空的桶子进行排序。

4)从不是空的桶子里把项目再放回原来的序列中。

时间复杂度:O(n+C) ,C为桶内排序时间。

 类似资料:
  • 本文向大家介绍请你说一说洗牌算法?相关面试题,主要包含被问及请你说一说洗牌算法?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 考察点: 公司:腾讯 1、Fisher-Yates Shuffle算法 最早提出这个洗牌方法的是 Ronald A. Fisher 和 Frank Yates,即 Fisher–Yates Shuffle,其基本思想就是从原始数组中随机取一个之前没取过的数字到新的

  • 本文向大家介绍请你说一说你知道的自动化测试框架相关面试题,主要包含被问及请你说一说你知道的自动化测试框架时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、模块化测试框架 模块化测试脚本框架(TEST MODulARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化

  • 本文向大家介绍请你说一说OS缺页置换算法相关面试题,主要包含被问及请你说一说OS缺页置换算法时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当访问一个内存中不存在的页,并且内存已满,则需要从内存中调出一个页或将数据送至磁盘对换区,替换一个页,这种现象叫做缺页置换。当前操作系统最常采用的缺页置换算法如下: 先进先出(FIFO)算法:置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按

  • 本文向大家介绍请你说一说推荐算法,fm,lr,embedding相关面试题,主要包含被问及请你说一说推荐算法,fm,lr,embedding时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 推荐算法: 基于人口学的推荐、基于内容的推荐、基于用户的协同过滤推荐、基于项目的协同过滤推荐、基于模型的协同过滤推荐、基于关联规则的推荐 FM: LR: 逻辑回归本质上是线性回归,只是在特征到结果的映射中

  • 本文向大家介绍请你说一说快速排序,并手写代码相关面试题,主要包含被问及请你说一说快速排序,并手写代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2、快速排序的三个步骤: (1)选择基准:在

  • 本文向大家介绍请你来介绍一下各种排序算法及时间复杂度相关面试题,主要包含被问及请你来介绍一下各种排序算法及时间复杂度时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 插入排序:对于一个带排序数组来说,其初始有序数组元素个数为1,然后从第二个元素,插入到有序数组中。对于每一次插入操作,从后往前遍历当前有序数组,如果当前元素大于要插入的元素,则后移一位;如果当前元素小于或等于要插入的元素,则将要