归并排序算法问题 c 语言实现

2014-11-17 19:24:49 +08:00
 SlientHunter
我在网上查了一下归并排序算法,都需要分配一个新的数组,下面是我考虑的代码(不分配新的数组),不知道这样是否可行,效率如何,希望得到指点。

void mergsort(int v[], int left, int right){
int i, j, k, middle, temp;

if((right-left) < 2){
if(v[left] > v[right]){
temp = v[left];
v[left] = v[right];
v[right] = temp;
}
return;
}
middle = (left + right) / 2;
mergsort(v, left, middle);
mergsort(v, middle+1, right);
for(i=left, j=middle+1;j<=right;j++){
if(v[i] >= v[j]){
temp =v[j];
k = j;
while(k > i){
v[k] = v[k-1];
k--;
}
v[k]= temp;
i++;
}
}
}
2717 次点击
所在节点    程序员
8 条回复
Jaylee
2014-11-17 19:32:20 +08:00
逼格不够高
SlientHunter
2014-11-17 19:34:08 +08:00
@Jaylee 不懂啥意思
nolouch
2014-11-17 20:39:58 +08:00
你合并那段,本来O(N)解决的,你又来了次O(N*N)的插入排序,,,还不去直接插入排序了呢。
@SlientHunter
jiang42
2014-11-17 20:41:24 +08:00
有错误吧-。-
mergesort([1], 0, 0)应该会出bug
jiang42
2014-11-17 20:45:25 +08:00
看错了,没问题
heliumhgy
2014-11-18 01:26:49 +08:00
并归排序本来就不是in place的
msg7086
2014-11-18 08:10:22 +08:00
不肯给空间,就多花时间。
xylophone21
2014-11-18 13:21:25 +08:00
这个接口定义看的很是醉人啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/147235

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX