给4000000个1~999的整数排序,估计最快要多长时间?

changxing 2001-04-22 06:26:00
我试了一下,27s,30M内存(太大了)
pii350,gcc 2.95.2,win2k,radix sort

应该还能再快点吧
谁能指点一个好方法,谢谢了
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
WadeHan 2001-10-09
  • 打赏
  • 举报
回复
up
陈硕 2001-10-01
  • 打赏
  • 举报
回复
gz
changxing 2001-04-25
  • 打赏
  • 举报
回复
谢谢大家
changxing 2001-04-25
  • 打赏
  • 举报
回复
啊?这里的帖子不能给分呀?
严黎斌 2001-04-23
  • 打赏
  • 举报
回复
大家注意g9yuayon(渡渡鸟) 的算法,不错呀。
g9yuayon 2001-04-23
  • 打赏
  • 举报
回复
归并排序是divide-and-conquer算法,也就是说,它把问题拆分成子问题,待解出子问题后,再
把子解合并起来。这种解法一般用递归。具体到这道题,假设我们把要排序的数分成两堆,而且
每堆都已排好序了,那我们只需把两堆合并起来。合并可以在O(n)时间做完,因为我们可以每次从两堆数据中各读一个,然后把小的(假设递增排序)放进解答,然后读入小的所在那堆数据中
的下一个,然后和剩下的比较,如此反复。。。直到一堆处理完了,我们便把剩下的那堆放在解答
的最后(反正这堆都排好了)。伪代码:
merge(array result, array A1, array A2){ // A1 and A2 are sorted
int i = 0, j = 0;
int length = 0;
// A1 或 A2 还 剩有未处理的元素
while( length < lengthOf(A1) or length < lengthOf(A2) ){
if(A1[i] <= A2[j]){
result[length] = A1[i];
i++;
}else{
result[length] = A2[j];
j++;
}
length++;
}

//只有一个while loop会被执行
while(length < lengthOf(A1)){
result[length] = A1[length];
length++;
}


while(length < lengthOf(A2)){
result[length] = A2[length];
length++;
}

return result;
}
算法复杂度:o(n)

比如A1=1, 3, 5, 7, 8; A2 = 2, 3, 4, 5, 6, 则排序的次序是1, 2, 3(from A1),
3(from A2), 4, 5(from A2), 5(from A1), 6, 7, 8.

有了合并的方程,我们就可以把原始数据细分成n个子数组,每个里面只有一个元素,然后两两
合并,直到形成答案。细分算法复杂度log(n),所以总复杂度:O(nlog(n))。代码很简单,你
就自己写吧。
这个的问题是nlog(n)的常数项其实比较大,所以归并的平均表现不如快速排序,但最坏表现
比快速排序好(快速排序最坏O(n^2)).
changxing 2001-04-23
  • 打赏
  • 举报
回复
我用的基数排序也是利用了数组递增的特点,所有时间都是集中在输入输出上了
我想知道归并排序的原理,能讲解一下吗,我会加分的。
g9yuayon 2001-04-23
  • 打赏
  • 举报
回复
对这道题来说,不用什么专门的排序法。创建一个数组a[999](假设用C的语法),清零。然后读入数据。对没一个数据data,a[data-1]++。从a[0]开始,打印a[data]个data,就成了(假设你要
的是递增顺序)。算法复杂度:0(n), 空间复杂度:0(n). why? 充分利用了数组的Index已经
排序的性质。对比最快的排序算法(基于数据比较的):0(n*log(n)).问题:如果要你数据中
所有的数,没个数中只挑一个,还不能用数组,怎么做?http://www.programmingpearls.com
上有精彩论述。
windindance 2001-04-22
  • 打赏
  • 举报
回复
用归并排序,应该快很多。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧