社区
数据结构与算法
帖子详情
c++ 面试题目 算法
sdenli
2008-07-15 10:08:20
有一组数组长度如是100万 , 内部数据是从1 到 100万随即无顺序排列,同要求对其进行排序,请问使用什么方法可以效率最高
或有什么其它的方法,请分析
...全文
320
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++
面试题
合集打包下载(大小21MB)
5. **
C++
面试题
集锦.docx**:此文档汇总了各类
C++
面试题
目
,特别关注了模板、设计模式和
算法
等方面,强调理论与实践的结合。 6. **C
C++
笔试题附答案华为
面试题
系列.txt**:华为公司对技术实力有很高的要求,这份...
常见
C++
面试题
汇总(最全c语言
面试题
)
常见
C++
面试题
汇总(最全c语言
面试题
) 所包含文件: 1、华为
C++
内部培训材料 2、130道
面试题
.doc 3、
C++
试题.htm 4、C-
C++
程序设计员应聘常见面试试题深入剖析.mht 5、C语言
面试题
大汇总之华为
面试题
.txt 6、C语言...
大公司
C++
面试题
目
集锦
这份"大公司
C++
面试题
目
集锦"包含的两份文档——"
c++
试题(1).doc"和"
c++
试题(2).doc",无疑是帮助你巩固知识、提升技能的关键资源。以下是基于这些文件可能涵盖的一些重要知识点的详细解析: 1. **基础语法**:...
c++
面试习题打包下载
此外,一些基础的
算法
和数据结构知识,如链表、树、图、排序、搜索
算法
等,也经常出现在
面试题
目
中。 值得一提的是,
C++
的面试不仅仅是对编程知识的考察,同样也体现了求职者的问题解决能力、逻辑思维能力以及对...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章