社区
数据结构与算法
帖子详情
c++ 面试题目 算法
sdenli
2008-07-15 10:08:20
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
...全文
314
11
打赏
收藏
c++ 面试题目 算法
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高 或有什么其它的方法,请分析
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++
数据结构
算法
笔试题资料合集.zip
C++
面试题
笔试题
C++
数据结构
算法
笔试题资料合集: 50个C、
C++
面试题
.pdf
C++
数据结构、
算法
笔试题.docx
C++
基础
面试题
.docx
C++
开发工程师
面试题
库.docx
C++
技能测试试卷一及答案.docx
C++
技能测试试卷二及答案.docx
c++
笔试面试宝典.docx
C++
笔试
面试题
带答案.docx
c++
笔试题汇总.pdf
C++
经典
面试题
库 附带参考答案.docx
C++
语言程序设计试题.docx C
C++
面试问题分类大汇总.docx C_
C++
笔试题大全.doc gamesloft
C++
面试题
目
.docx 常见
C++
笔试题
目
整理(含答案).docx 经典
C++
面试题
.docx 近期出现的
C++
面试题
整理(附详细答案).docx
c++
面试题
合集打包下载(大小21MB)
个人整理网络
c++
面试题
合集
大公司
C++
面试题
目
集锦
C++
的
面试题
目
非常好的东西 面试大公司必备
常见
C++
面试题
汇总(最全c语言
面试题
)
常见
C++
面试题
汇总(最全c语言
面试题
) 所包含文件: 1、华为
C++
内部培训材料 2、130道
面试题
.doc 3、
C++
试题.htm 4、C-
C++
程序设计员应聘常见面试试题深入剖析.mht 5、C语言
面试题
大汇总之华为
面试题
.txt 6、C语言
面试题
大汇总之微软亚洲技术中心
面试题
.txt 7、c语言
面试题
及答案_1.txt 8、
面试题
.htm 9、求职笔试面试大全.htm 10、如何回答十个最棘手的面试问题.htm 11、英语面试常见问题.htm 12、英语面试问答.htm 常见
C++
面试题
汇总(最全c语言
面试题
) 13、最全的C-
C++
试题集和答案1.txt 14、最全的C-
C++
试题集和答案2.txt 常见
C++
面试题
汇总(最全c语言
面试题
)
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章