社区
数据结构与算法
帖子详情
c++ 面试题目 算法
sdenli
2008-07-15 10:08:20
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
...全文
305
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++
数据结构
算法
笔试题资料合集.zip
C++
面试题
笔试题
C++
数据结构
算法
笔试题资料合集: 50个C、
C++
面试题
.pdf ...gamesloft
C++
面试题
目
.docx 常见
C++
笔试题
目
整理(含答案).docx 经典
C++
面试题
.docx 近期出现的
C++
面试题
整理(附详细答案).docx
C++
面试题
汇总100
最全面的经典的
C++
面试题
,指针,数组,宏定义,结构体,链表
2023
C++
零基础入门视频教程
本课程不会盲
目
的讲解
C++
语法,将会和Google开源
C++
项
目
WebRTC结合,介绍
C++
在实际项
目
中的应用,在部分章节会提供相应的
算法
题
目
巩固本章节的内容。 除了
C++
的学习,本课程会提供一些软件开发的经验、方法,让大家...
C++
面试题
算法
程序设计
C++
面试题
算法
程序设计 里面含有面试所遇到的常见的题
目
BAT谷歌微软等各IT公司互联网
C++
JAVA 计算机笔试面试真题复习资料108个文档合集.zip
gamesloft
C++
面试题
目
.docx Google笔试面试 IQ智力
面试题
笔试题 JAVA笔试面试资料 NET
面试题
笔试题 web开发 中兴资料 微软笔试面试 数据库
面试题
笔试题 百度笔试面试
算法
数据结构 网易搜狐新浪笔试面试 腾讯笔试...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章