滴滴出行2016研发工程师笔试题--排序算法空间

来自:滴滴出行2016研发工程师笔试题
题目:下述几种排序方法中,要求内存最大的是()
A. 快速排序
B. 插入排序
C. 选择排序
D. 归并排序

下面是分析:
A. 快速排序和归并排序都是属于较快排序算法,对于特别大的数组,需要用这些算法。快速排序使用了分而治之的思想。这个算法所需要的空间复杂度(内存)是O(log2N) ~ O(N)。 (by the way,数字2是log的底数)。由于快速排序是递归,需要用一个栈来存放每一层递归调用的信息,其最大容量应与递归调用的深度一致。最好的情况下是O(log2N);最坏的情况下,因为要进行n-1次递归调用,所以就是O(N)。用递归来做快速排序时有点想二叉搜索树的前序遍历(根,左,右)。

B. 插入排序的空间复杂度是O(1)。

C. 选择排序的空间复杂度是O(1)。

D. 归并排序的空间复杂度是O(N),因为归并排序需要一个与原始数组大小相等的辅助数组。所以答案就是D

BY THE WAY, 考虑到一些同学没见到过这些算法,我就好人做到底吧,介绍选项中的四个排序算法。

快速排序,英文名叫Quick Sort。快速排序是对冒泡排序的一种改进,改进的是从两端向中间进行移动的,关键码较大的就能从前面移动到后面,关键码较小的从后面移动到前面,这样就减少了总的比较次数和移动次数。
思想
第一,首先选一个轴值(povit),将待排序记录划分成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值。
第二,分别对这两部分重复上述过程,直到整个序列有序。

插入排序,英文名叫Insertion Sort
思想
第一,将整个待排序的记录序列划分成有序区和无序区。
第二,将无序区的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,这样有序区就增加一个记录。
第三,重复执行第二步,until到无序区没有数字为止

选择排序,英文名叫Selection Sort
思想
就是找数组中的最大值插入到最后一个位置,然后忽略最后一个位置,将第二大的数字插入到倒数最后第二个位置,这样循环做到把所有数字排完序列。

归并排序,英文名叫Merge Sort
思想
归并排序需要一个与原始数组大小相等的辅助数组。
将数组分成两个部分,递归地排序每一部分,然后将两部分归并。

希望这篇文章对您有所帮助!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值