社区
数据结构与算法
帖子详情
c++ 面试题目 算法
sdenli
2008-07-15 10:08:20
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
...全文
343
11
打赏
收藏
c++ 面试题目 算法
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高 或有什么其它的方法,请分析
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
RocWay007
2008-07-17
打赏
举报
回复
一般栈只有1M的空间,所以还是new比较稳妥,当然除非人为修改栈空间大小。
jieao111
2008-07-15
打赏
举报
回复
按平均时间将排序分为四类:
(1)平方阶(O(n2))排序
一般称为简单排序,例如直接插入、直接选择和冒泡排序;
(2)线性对数阶(O(nlgn))排序
如快速、堆和归并排序;
(3)O(n1+£)阶排序
£是介于0和1之间的常数,即0<£<1,如希尔排序;
(4)线性阶(O(n))排序
如桶、箱和基数排序。
各种排序方法比较
简单排序中直接插入最好,快速排序最快,当文件为正序时,直接插入和冒泡均最佳。
影响排序效果的因素
因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素:
①待排序的记录数目n;
②记录的大小(规模);
③关键字的结构及其初始状态;
④对稳定性的要求;
⑤语言工具的条件;
⑥存储结构;
⑦时间和辅助空间复杂度等。
不同条件下,排序方法的选择
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的 排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。
http://student.zjzkb.edu.cn/course_ware/data_structure/web/main.htm
yakashop
2008-07-15
打赏
举报
回复
用位图法
mrliu_xz
2008-07-15
打赏
举报
回复
都是整数的话可以用计数法排序
复杂度O(n)
sdenli
2008-07-15
打赏
举报
回复
....
gaoteng1984
2008-07-15
打赏
举报
回复
我总结一下:
1.如果这100万个数没有缺失和重复,就不用排序,直接a[i]=i完事儿(题目本意可能不是这个)
2.位图法只适用于没有重复的情况。如果有重复元素,位图法无法记录每个元素的出现次数。但如果真没重复元素,用1方法就可以了。
3.如果有重复:如果足够的内存,即(100万*4B)约等于4MB的内存空间,使用改进的位图法最快。时间复杂度O(N),空间复杂度O(N)。即开个unsigned int a[100*10000]大小的数组,然后每一个元素表示一个数出现了几次,比如a[8]==5表示"8"出现了5次。扫描数组,累加a[出现的数]即可。
4.如果内存实在少得可怜,连4MB都没有,就只能用归并排序了。内存有多大,就总共开辟多大的数组。
sdenli
2008-07-15
打赏
举报
回复
[Quote=引用 6 楼 xibeitianlang 的回复:]
等到用的时候在直接排序就行,不用就不排了,最好先free(数组);
[/Quote]
???
zzstv
2008-07-15
打赏
举报
回复
[Quote=引用 4 楼 pc_fly 的回复:]
引用楼主 sdenli 的帖子:
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
我认为这是道脑筋急转弯的题。排什么排?反正长度是1到100万,而其中的数也是1到100万,那就a[i]=i不就可以了?当然前提是数没有缺失和重复。
[/Quote]
确实啊
xibeitianlang
2008-07-15
打赏
举报
回复
等到用的时候在直接排序就行,不用就不排了,最好先free(数组);
sdenli
2008-07-15
打赏
举报
回复
...
RocWay007
2008-07-15
打赏
举报
回复
[Quote=引用楼主 sdenli 的帖子:]
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
[/Quote]
我认为这是道脑筋急转弯的题。排什么排?反正长度是1到100万,而其中的数也是1到100万,那就a[i]=i不就可以了?当然前提是数没有缺失和重复。
C/
C++
笔试
面试题
目
汇总3——各种排序
算法
原文:blog.chinaunix.net/u/1222/showart_318070.html
排序
算法
是一种基本并且常用的
算法
。由于实际工作中处理的数量巨大,所以排序
算法
对
算法
本身的速度要求很高。而一般我们所谓的
算法
的性能主要是指
算法
的复杂度,一般用O方法来表示。在后面我将给出详细的说明。对于排序的
算法
我想先做一点简单的介绍,也是给这篇文章理一个提纲。
我将按照
算法
的复杂度,从简单到难来分析
算法
。
第一部分是简单排序
算法
,后面你将看到他
C++
程序员
面试题
目
总结(涉及
C++
基础、多线程多进程、网络编程、数据结构与
算法
)...
说明:
C++
程序员
面试题
目
总结(涉及
C++
基础知识、多线程多进程、TCP/IP网络编程、Linux操作、数据结构与
算法
) 内容来自作者看过的帖子或者看过的文章,个人整理自互联网,如有侵权,请联系作者删除。 作者为工作两年经验的
C++
程序员,因巩固知识体系,面试,梳理以往看到过的知识点,故总结如下相关题
目
, 题
目
答案请自行google baidu,这里只提供题
目
。 一、
C++
基础知识
面试题
...
【
C++
上岸】
C++
常见
面试题
目
--
算法
篇(第十九期)
本期涵盖了双指针滑动窗口前缀和螺旋矩阵四大核心考点。面试前背熟这些代码,通过率+50%!💯彩蛋:遇到“水果成篮”这类题,心里默念:“滑动窗口,yyds!” 🍉🍇恭喜你坚持到了最后!🎉 本期我们覆盖了10道经典
算法
题,包括双指针等核心思想。掌握这些,能让你在
C++
面试中脱颖而出。
算法
学习重在实践,建议多写代码和模拟测试。如果你有疑问或想讨论,欢迎留言!😊 下期见,继续“
C++
上岸”之旅!🔥。
C++
面试题
目
汇总 容器和
算法
C++
面试题
目
汇总 容器和
算法
容器和
算法
`map`和`set`有什么区别,分别又是怎么实现的?请你来介绍一下`STL`的`allocator``STL`迭代器删除元素`STL`中`MAP`数据存放形式`STL`有什么基本组成`STL`中`map`, `unordered_map`, `multimap``vector`和`list`的区别,应用,越详细越好`STL`中迭代器的作用,有指针为何还要迭...
【
C++
上岸】
C++
常见
面试题
目
--
算法
篇(第二十期)
掌握这10道题,
算法
面试不再慌!哈希表用于快速查找(两数之和、字母异位词等);双指针用于有序数组的搜索(三数之和等);链表+哈希实现O1O(1)O1复杂度的 LRU。快去刷题吧,offer在等你!💪需要完整代码模板的评论区留言~👇。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章