大家帮我看看这个合并排序有什么问题?

fang100 2008-11-02 08:14:57


大家帮我看看这个合并排序有什么问题?谢谢啦!~


#include <iostream>

using namespace std;

void merge(int array[], int p, int q, int r);

void mergesort(int array[], int start, int end);

void show_array(int array[]);

int main()
{
int array[10] = {0};

cout << "please type into many numbers: " << endl;

for(int i = 0; i < 10; i++)
{
cin >> array[i];
}

int start = 0;
int end = 9;

mergesort(array, start, end);
show_array(array);

return 0;
}

void mergesort(int array[], int start, int end)
{
if(start < end)
{
int mid;
mid = (start + end) / 2;

mergesort(array, start, mid);
mergesort(array, mid + 1, end);
merge(array, start, mid, end);
}

}

void merge(int array[], int p, int q, int r)
{
int temp1[5];
int temp2[5];

for(int i = 0; i < 5; i++)
{
temp1[1] = array[i];
}

for(int i = 5 ; i < 10; i++)
{
int j = 0;
temp2[j] = array[i];
j++;
}

int i = 0;
int j = 0;
int k = 0;

while(p <= q && (q + 1) <= r)
{
if(temp1[i] <= temp2[j])
{
array[k++] = temp1[i++];
}
else
{
array[k++] = temp2[j++];
}
}

while(p <= q)
{
array[k++] = temp1[i++];
}

while ((q + 1) <= r)
{
array[k++] = temp2[j++];
}

}

void show_array(int array[])
{
for (int i = 0;i < 10; i++)
{
cout << array[i] << "\t";
}
}
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-11-02
  • 打赏
  • 举报
回复
void merge(int array[], int p, int q, int r) 
{
int temp1[5];
int temp2[5];
int t = 0;
for(int i = p; i <= q; i++)
{
temp1[t++] = array[i];
}
t=0;
for(int i = q+1 ; i <= r; i++)
{
temp2[t++] = array[i];
}

int i = 0;
int j = 0;
int k = p;

while(i < q-p+1 && j < r-q)
{
if(temp1[i] <= temp2[j])
{
array[k++] = temp1[i++];
}
else
{
array[k++] = temp2[j++];
}
}

while(i < q-p+1 )
{
array[k++] = temp1[i++];
}

while ( j < r-q )
{
array[k++] = temp2[j++];
}

}
yshuise 2008-11-02
  • 打赏
  • 举报
回复
《算法导论》上的代码非常之精巧,不会有错误。楼主记住:只是
《算法导论》上数组是从1开始的,而我们用的是从0开始。
帅得不敢出门 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
这种代码很难看出问题的,觉得有问题应该去好好调试。不管怎么说,递归总是不好的
引用 2 楼 fang100 的回复:
算法导论上的 合并排序 不是插入排序
[/Quote]
不能把递归一棍子打死
arong1234 2008-11-02
  • 打赏
  • 举报
回复
这种代码很难看出问题的,觉得有问题应该去好好调试。不管怎么说,递归总是不好的
[Quote=引用 2 楼 fang100 的回复:]
算法导论上的 合并排序 不是插入排序
[/Quote]
fang100 2008-11-02
  • 打赏
  • 举报
回复
算法导论上的 合并排序 不是插入排序
arong1234 2008-11-02
  • 打赏
  • 举报
回复
是不是就是所谓的插入排序?感觉你的代码执行效率肯定是非常非常低的,也许两个循环就可以做到了,你用函数递归调用实现。一般递归只在理论描述上能使用,实际实现是不能用递归的

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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