下复杂度仍然是O(nlogn)的快速排序算法复杂度是什么算法

1、在各种排序算法中,哪些是稳定的?哪些是不稳定;2、请简述各种排序算法的时间复杂度,空间复杂度(;2.时间复杂度比较:;排序方法最好情况最坏情况平均情况稳定性;冒泡排序O(n)O(n2)O(n2)稳定;快速排序O(nlogn)O(n2)O(nlogn;简单选择排序O(n2)不稳定;堆排序O(nlogn)不稳定;直接插入排序O(n)O(n2)O(n2)稳定;
1、在各种排序算法中,哪些是稳定的?哪些是不稳定的?
2、请简述各种排序算法的时间复杂度,空间复杂度(最好情况,最差情况,平均情况)
答:1.快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法.
2.时间复杂度 比较:
简单选择排序
直接插入排序
空间复杂度
(1)选择排序最好是 O(n2)
(2)快速排序在平均情况下复杂性为O(nlogn),最坏情况 O(n2),最好O(nlogn)
(3)堆排序和合并排序在最坏情况下复杂性为O(nlogn)。可见,合并排序和堆排序是比较排序算法中时间复杂度最优算法。
空间复杂度
空间性能是排序所需辅助空间大小
所有简单排序和堆排序都是0(1)
快速排序为0(logn),要为递归程序执行过程栈所需的辅助空间
归并排序和基数排序所需辅助空间最多,为O(n)
包含各类专业文献、生活休闲娱乐、行业资料、各类资格考试、高等教育、中学教育、幼儿教育、小学教育、96请简述各种排序算法的时间复杂度等内容。 
 常用排序算法时间复杂度_计算机软件及应用_IT/计算机_专业资料。常用的排序算法的...在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为 O(1),...  各种排序的时间复杂度_IT/计算机_专业资料。pascal 初学 排序算法 所谓排序,就...请简述各种排序算法的时... 1页 免费
各种排序算法的稳定性和... 5页 1...  各种排序算法的稳定性和时间复杂度小结_学科竞赛_初中教育_教育专区。选择排序,快速...3页 免费 请简述各种排序算法的时... 暂无评价 1页 免费©2015 Baidu 使...  请简述各种排序算法的时间复杂度_天文/地理_自然科学_专业资料。1、在各种排序算法中,哪些是稳定的?哪些是不稳定的? 2、请简述各种排序算法的时间复杂度,空间复杂...  常用的排序算法的时间复杂度和空间复杂度分类: 笔试面试题
07:52 28837 人阅读 评论(7) 收藏 举报 算法存储 n2 测试工作 oo 常用的排序算法的...  算法及时间复杂度 (一)各个排序是算法思想:(1)直接插入排序:将一个记录插入到已排好的有序表中,从而得 到一个新的,记录数增加 1 的有序表。 (2)冒泡...  下面这个表格总结了各种排序算法的复杂度与稳定性: 各种排序算法复杂度比较.png 冒泡排序 冒泡排序可谓是最经典的排序算法了,它是基于比较的排序算法,时间复杂度为 ...  数据结构试卷(九)一、选择题(30 分) 1.下列程序段的时间复杂度为( )。 ...p-&right-&left=s; p-&right=s; 6.下列各种排序算法中平均时间复杂度为 ...&&Tel:400-880-6318
当前位置: >>
>> 试题查看
试卷名称&&&&
考试中心&&&&
试卷年份&&&&2004年下半年
试题题型&&&&【单选题】
以关键字比较为基础的排序算法在最坏情况下的计算时间下界为O(nlogn)。下面的排序算法中,最坏情况下计算时间可以达到O(nlogn)的是(1);该算法采用的设计方法是(2)。 (1)A、归并排序&
B、插入排序&
C、选择排序&
D、冒泡排序 (2)A、分治法&
B、贪心法&
C、动态规划方法&
D、回溯法&
发表评论&&&&
&&更多试题
信息系统项目管理师培训
李老师:信息系统项目管理师、国家工信部和科技部专家、高级项目经理、12年培训经验,编写了多本教材,...算法复杂度为O(N) 的排序算法_Linux编程_Linux公社-Linux系统门户网站
你好,游客
算法复杂度为O(N) 的排序算法
来源:Linux社区&
作者:小止
题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速排序等等。这些排序的算法,要么是O(n2)的,要么是O(nlogn)的。可是这道题竟然要求是O(n)的,这里面到底有什么玄机呢?题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人一般也要等到将近二十岁才上班,一般人再晚到了六七十岁也不得不退休。由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名员工。举个简单的例子,假设总共有5个员工,他们的年龄分别是25、24、26、24、25。我们统计出他们的年龄,24岁的有两个,25岁的也有两个,26岁的一个。那么我们根据年龄排序的结果就是:24、24、25、25、26,即在表示年龄的数组里写出两个24、两个25和一个26。void SortAges(int ages[], int length) { & & if(ages == NULL || length &= 0) & & & & & & & const int oldestAge = 99; & & int timesOfAge[oldestAge + 1]; & & & for(int i = 0; i &= oldestA ++ i) & & & & timesOfAge[i] = 0; & & & for(int i = 0; i & ++ i) & & { & & & & int age = ages[i]; & & & & if(age & 0 || age & oldestAge) & & & & & & throw new std::exception("age out of range."); & & & & & ++ timesOfAge[age]; & & } & & & int index = 0; & & for(int i = 0; i &= oldestA ++ i) & & { & & & & for(int j = 0; j & timesOfAge[i]; ++ j) & & & & { & & & & & & ages[index] = & & & & & & ++ & & & & } & & } }
在上面的代码中,允许的范围是0到99岁。数组timesOfAge用来统计每个年龄出现的次数。某个年龄出现了多少次,就在数组ages里设置几次该年龄。这样就相当于给数组ages排序了。该方法用长度100的整数数组辅助空间换来了O(n)的时间效率。由于不管对多少人的年龄作排序,辅助数组的长度是固定的100个整数,因此它的空间复杂度是个常数,即O(1)。
本文永久更新链接地址:
相关资讯 & & &
& (08月09日)
& (07月27日)
& (07月22日)
& (07月28日)
& (07月27日)
& (05月27日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款基于比较的排序,时间复杂度下界是o(nlogn)的证明
对于n个待排序元素,在未比较时,可能的正确结果有n!种。
在经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2种。
依次类推,直到经过m次比较,剩余可能性n!/(2^m)种。
直到n!/(2^m)&=1时,结果只剩余一种。此时的比较次数m为o(nlogn)次。
所以基于排序的比较算法,最优情况下,复杂度是o(nlogn)的。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
原因: 对于n个待排序元素,在未比较时,可能的正确结果有n!种. 在经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2种. 依次类推,直到经过m次比较,剩余可能性n!/(2^m)种. 直到n!/(2^m)&=1时,结果只剩余一种.此时的比较次数m为o(nlogn)次. 所以基于排序的比较算法,最优情况下,复杂度是o(nlogn)的 ...
上面介绍了几种常用的简单排序算法,接下来介绍几种基于简单排序算法改进后的排序算法. 注:Swap方法具体实现见上篇 1.希尔排序(基于直接插入排序算法的改进) 思想:直接插入排序在待排序的记录较少或记录集合本身基本有序时,具有很大的优势,但是并不适合与待排序的数量较多或待排序集合无序甚至接近逆序的情况.该算法通过采用跳跃策略,即将相距某个增量的记录组成一个子 ...
基于交换的排序算法:冒泡排序,快速排序. 冒泡排序:总的时间复杂度O(n2) /* * 冒泡排序 */ public static void bubbleSort(int[] array, int length){ for(int i=1; i& i++){ for(int j=0;j&length-i;j++){ if(array ...
.cn/s/blog_48bhb0j.html 昨天下午吃完饭,正好碰到一同学,就随便聊了聊. 他说刚参加完一个面试.我很感兴趣,因为下半年就该我找工作了,这方面的信息对我来说比较重要.看得出来,他有点小郁闷,说面试官是个BT.问了原因之后,我便很同意他这个观点了.面试官似乎对查找和排序很感兴趣,问的 ...
这几天学习了基于比较的排序算法,有插入排序.归并排序.堆排序和快速排序.下面自己用C++代码实现了一下: 1.插入排序,插入排序的思想比较简单,就是像我们打扑克牌把手中的牌整理好一样,假设手中的牌是已经排好的,只需要找找到适当的位置把下一张牌插入到已有的牌中就好了. void InsertionSort(int *A,int beg,int end){ in ...
排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说,原因是有些内容不好公开
几点基础概念回顾 (1)排序定制化不同于实现业务排序.
实现业务排序可以是查阶段,通过boost.各种func 组 ...
排序是算法学习中最基本的问题. 1.平均时间复杂度均为O(N2)的排序 1.1 插入排序 插入排序对少量元素的排序非常有效.工作机制就像打牌一样,为了将牌插入到已排好序的牌中,需要将牌与手中的牌从右向左进行比较. def insertionSort(alist): n=len(alist) for i in xrange(1,n): key=alist[i] ...
基于链接的排序算法似乎已广泛应用到各种商业seohua.net&& 搜索引擎中.为了让设计出来的网站能够在各种搜索引擎中获得较高排名,设计者们应该知道这些算法的原理.Google排名的成功意味着PageRank算 法值得特别的关注.PageRank算法是少数几个公开的排序算法之一.PageRank算法对数学要求很高,但可以做些简单的解释,以分 ...

我要回帖

更多关于 排序算法的空间复杂度 的文章

 

随机推荐