我要找工作之排序相关

说明:题目出自牛客网,本人只是勤劳的搬运工,也是为了自己就业,所以做个小总结

1.拓扑排序

利用邻接表时的时间复杂度为O(n+e)。解释:若为避免重复检测入度为零的顶点,使用栈来保存所有入度为零的顶点。对有n个顶点和e条弧的有向图而言,建立求各顶点的入度的时间复杂度为O(e);建零入度顶点栈的时间复杂度为O(n);在拓扑排序过程中,若有向图无环,则每个顶点进一次栈,出一次栈,入度减一的操作在while循环中总共执行e次,所以总的时间复杂度为O(n+e)。

2.已知数据表A中每个元素距其最终位置不远,为节省时间排序,应采用什么方法排序?

解答:插入排序:如果平均每个元素离最终位置相距c个元素,则其复杂度为O(cn),一共n趟,每次比较c次;
快速排序:最好的、平均的复杂度都是O(nlog(n)),如果每次选择的中间数都最小或最大,那就是最坏的情况,复杂度是O(n*n);所以快速排序和元素的位置没有关系,跟选择的中间数有关。
堆排序:复杂度一直是O(nlog(n));
直接选择排序:跟元素位置没有关系,都要遍历n遍,每遍找出最小或最大数来,复杂度是O(n*n);
答案是插入排序。

3.对N个数进行排序,在各自最优条件下以下算法复杂度最低的是

解答:

改良的冒泡排序冒泡排序  最优时间复杂度为n

4.排序稳定是指排序前后值相同的两个数前后位置不变,直接插入、冒泡、归并、基数排序是稳定的,其余是不稳定的。


稳定性分析:A.起泡排序:稳定。
重复地走访过要排序的 数列 ,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
如果相等,没有必要交换,所以是稳定的。


B.折半插入排序:稳定排序。
容易知道,插入排序是稳定排序,很明显,折半插入排序,是插入排序的一种优化,所以也是稳定的。
C.简单选择排序:不稳定。
每次选择后面待排序的数中的最小(最大)放入当前位置,不稳定。
D.希尔排序:不稳定。
可以看做基于一定间隔的插入排序,明显不稳定。
E.基数排序:稳定排序。
F.堆排序:不稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值