死神vs火影3.0高手视频:整数排序算法的问题?

来源:百度文库 编辑:高校问答 时间:2024/05/05 11:09:21
对大量正长整型数据进行排序,哪个算法效率最高,也就是时间最少,范围1~2^32-1。
并简单说下排序过程。
我想知道我设计的那个算法效率怎么样。
我说的范围1~2^32-1是指每个数可能的大小范围;
总共的数目为50万个;
我用自己的排序算法大约5秒钟,不知道效率怎么样?

快排(最普遍 最简单)
算法思想为 分治
实现过程如上 gis19831203 所说的
“寻找枢轴(位于枢轴左边的都比枢轴小,位于枢轴右边的都比枢轴大),反复如此,用递归可以实现。”
堆排(不稳定,但是一种解决某类问题有效的算法思想)
……
这是时间复杂度为 N*(log2 N)的算法
更快的算法我就不知道了!!
你的最大数据的运算量为
2^32*32
估计……
即使是这样的算法也要几十分钟的运算时间!!!
除非你用超级计算机。。。
冒泡,插入……等N^2的算法
就不用考虑了

快排需要预先读入所有数据
堆排好像就不需要 可以一个一个读 建立堆
然后进行操作 但是 堆也是需要完整记录的
鉴于你的最大数据量为2^32!!
仅仅从空间上来说就不好满足~~~
即使算法效率很高,很快,很牛。
一般的编辑器也很难满足你的最大数据的要求
对操作系统的要求也很苛刻(建议用Linix)

C 好像自带 排序函数

!!!!!!!
原来是这样。。
无语……
这样的话用 快排算法
50万也就是0。01秒吧(应该是瞬间的事情)
你用的算法是N^2的算法 太慢了
一般来说这类题要求的时间应该在0。1sec~1sec之间
考察的知识点就是时间复杂度为 N*(log2 N)的排序算法
你的程序无法在限定时间内完成所有数据的测试
建议使用快排算法
到网上 搜一艘 此类算法的讲解
找到合适你自己的讲解 然后学习。。。。

可以用冒泡法试试,就是不断排出相邻两数的大小

可以用快速排序试试,基本思想:
寻找枢轴(位于枢轴左边的都比枢轴小,位于枢轴右边的都比枢轴大),反复如此,用递归可以实现。
可以找本书好好看看,一般的算法或数据结构书籍上都有常见的排序算法,也比较了各自的优缺点