谁能帮我看看我这个归并排序错在什么地方了?

quruichen 2008-10-10 08:05:30
#include <iostream>
using std::cout;
using std::endl;


const int ARRAY_SIZE = 100;

void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);

void merge(int A[], int const first, int const mid, int const last)
{
int left[ARRAY_SIZE/2+1],right[ARRAY_SIZE/2+1];
int left_size = mid - first;
int right_size = last - mid + 1;
int l,r,n;

for(l=0;l<left_size;l++)
left[l] = A[first+l];
for(r=0;r<right_size;r++)
right[r] = A[mid+r];

l=r=0;
n=first-1;

while ((l<left_size)&&(r<right_size))
{
n++;
if (left[l]<right[r])
A[n] = left[l++];
else
A[n] = right[r++];

}

if(l!=left_size-1)
{
while(l<=left_size-1) A[++n] = left[l++];
}
if (r!=right_size-1)
{
while(r<=right_size-1)A[++n] = right[r++];
}
}

void merge_sort(int a[],int first,int last)
{
int mid;
if (first<last)
{
mid=(first+last)/2+1;
merge_sort(a,first,mid-1);
merge_sort(a,mid,last);
merge(a,first,mid,last);
}
}

void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
}

如题 就是弄不出来!结果总是不对!谢谢各位高手了!
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_xiaoxin 2008-10-11
  • 打赏
  • 举报
回复
其实你犯的错误很简单,就是注释掉的部分
#include <iostream> 
using std::cout;
using std::endl;


const int ARRAY_SIZE = 100;

void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);

void merge(int A[], int const first, int const mid, int const last)
{
int left[ARRAY_SIZE/2+1],right[ARRAY_SIZE/2+1];
int left_size = mid - first;
int right_size = last - mid + 1;
int l,r,n;

for(l=0;l <left_size;l++)
left[l] = A[first+l];
for(r=0;r <right_size;r++)
right[r] = A[mid+r];

l=r=0;
n=first-1;

while ((l <left_size)&&(r <right_size))
{
n++;
if (left[l] <right[r])
A[n] = left[l++];
else
A[n] = right[r++];

}

//if(l!=left_size-1)
//{
while(l <=left_size-1) A[++n] = left[l++];
//}
//if (r!=right_size-1)
//{
while(r <=right_size-1)A[++n] = right[r++];
//}
}

void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2+1;
merge_sort(a,first,mid-1);
merge_sort(a,mid,last);
merge(a,first,mid,last);
}
}
void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout << a[i] <<endl;
}
}
quruichen 2008-10-11
  • 打赏
  • 举报
回复

#include <iostream>
using std::cout;
using std::endl;


const int ARRAY_SIZE = 100;

void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);

void merge(int A[], int const first, int const mid, int const last)
{
int left[ARRAY_SIZE/2+1],right[ARRAY_SIZE/2+1];
int left_size = mid - first;
int right_size = last - mid + 1;
int l,r,n;

for(l=0;l <left_size;l++)
left[l] = A[first+l];
for(r=0;r <right_size;r++)
right[r] = A[mid+r];

l=r=0;
n=first-1;

while ((l <left_size)&&(r <right_size))
{
n++;
if (left[l] <right[r])
A[n] = left[l++];
else
A[n] = right[r++];

}

//if(l!=left_size-1)
//{
while(l <=left_size-1) A[++n] = left[l++];
//}
//if (r!=right_size-1)
//{
while(r <=right_size-1)A[++n] = right[r++];
//}
}

void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2+1;
merge_sort(a,first,mid-1);
merge_sort(a,mid,last);
merge(a,first,mid,last);
}
}
void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout << a[i] <<endl;
}
}
星羽 2008-10-10
  • 打赏
  • 举报
回复
luxiaoxun 2008-10-10
  • 打赏
  • 举报
回复

#include <iostream>
using std::cout;
using std::endl;


const int ARRAY_SIZE = 100;

void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);

void merge(int A[], int const first, int const mid, int const last)
{
int* a=new int[last-first+1];
int l=first,r=mid+1,n=0;
int i;
while(l<=mid&&r<=last)
if(A[l]<=A[r]) a[n++]=A[l++];
else a[n++]=A[r++];
while(l <=mid)
a[n++] = A[l++];
while(r <=last)
a[n++] = A[r++];
for(i=0,n=first;n<=last;)
A[n++]=a[i++];
delete []a;
}

void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2;
merge_sort(a,first,mid);
merge_sort(a,mid+1,last);
merge(a,first,mid,last);
}
}

void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout <<a[i] <<endl;
}
}


按归并排序的思路给你改了一下
Ps:以后发代码 按“#”选什么代码 这样别人好看
quruichen 2008-10-10
  • 打赏
  • 举报
回复
用了很多种办法了,可就是没法解决! 各位大虾来帮帮我吧!!
csdn5211 2008-10-10
  • 打赏
  • 举报
回复
帮你顶顶吧,建议自己跟进去调试,vc的话就加断点,gcc就用gdb。

65,211

社区成员

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

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