c语言程序 合并两个已排序的数组 不能显示正确的结果 请问错误在哪里?

#include<stdio.h>#include<stdlib.h>inta[100];intb[100];voidmerge(intp,intq,intr){ints... #include <stdio.h>
#include<stdlib.h>
int a[100];
int b[100];
void merge(int p,int q,int r)
{ int s,t,k;
s=p;
t=p+1;
k=p;
while(s<=q&&t<=r)
{if(a[s]<=a[t])
{b[k]=a[s];
s++;}
else{
b[k]=a[t];
t++;}
k++;}
if(s==q+1)
for(;t<r;t++)
{b[k]=a[t];
k++;}
else for(;s<q;s++)
{b[k]=a[s];
k++;}
}
int main(void)
{ int n,i,p,q,r;
printf("输入数组元素个数:");
scanf("%d",&n);
printf("输入数组元素:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("输入数组三个索引:");
scanf("%d","%d","%d",&p,&q,&r);
merge(p,q,r);
printf("输出数组元素:");
for(i=0;i<n;i++)
printf("%d",b[i]);
system("pause");
}
展开
 我来答
宫访风
2011-09-27 · TA获得超过156个赞
知道答主
回答量:661
采纳率:0%
帮助的人:264万
展开全部
这个应该没问题,没有仔细测试。你试试看吧。不过是C++的。你可以字节写个函数来代替这个类。

using namespace std;
template <typename T>
class Obj
{
public:
Obj(T *p1,size_t sizeofp1,T *p2,size_t sizeofp2):m_p1(p1),
m_p2(p2),
m_sizeofp1(sizeofp1),
m_sizeofp2(sizeofp2){
m_sumsize = sizeofp1+sizeofp2;
}

T& operator [](size_t index)
{
if (index > m_sizeofp1+m_sizeofp2)
{
throw std::out_of_range("out_of_range");
}
if (index<m_sizeofp1)
{
return m_p1[index];
}
else
{
return m_p2[index - m_sizeofp1];
}
}
size_t size() const
{
return m_sumsize;
}
protected:
private:
T *m_p1;
T *m_p2;
size_t m_sizeofp1;
size_t m_sizeofp2;
size_t m_sumsize;
};
void _tmain(int argc, _TCHAR* argv[])
{

int p1[] = ;
int p2[] = ;
Obj<int> test(p1,3,p2,3);
for( int i = test.size()-1; i >= 0; i-- )
{
for( int j = 0; j < i; j++ )
{
if( test[j] > test[j+1] )
{
int temp = test[j];
test[j] = test[j+1];
test[j+1] = temp;
}
}
}
for (size_t i = 0 ; i < test.size() ;++i)
{
cout<<test[i]<<endl;
}
return;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jane_sen
推荐于2016-02-27 · 超过12用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:23.5万
展开全部
这是我写的,自己比较下吧。排好序的数组合并。
#include <stdio.h>
#include <stdlib.h>
#define m 10
#define n 5
void merge(int c[m+n],int d[m+n],int p,int q,int r)
{
int s,t,k;
int l;
s=p;
t=q+1;
k=p;
while((s<=q) && (t<=r))
if(c[s]<=c[t])
d[k++]=c[s++];
else
d[k++]=c[t++];
if(s>q)
for(l=t;l<=r;l++)
d[k++]=c[l];
else
for(l=s;l<=q;l++)
d[k++]=c[l];
}
int main()
{
//int a[m]={1,5,11,23,24,25,30,41,46,56};
int a[m]={6,7,8,9,10,11,12,13,14,15};
int b[n]={1,2,3,4,5};
int c[m+n],d[m+n];
int i,j;
//输出a中元素
printf("\na数组元素:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
//输出b中元素
printf("\nb数组元素:");
for(i=0;i<n;i++)
printf("%d ",b[i]);
//合并a、b,输出c中元素
for(i=0;i<m;i++)
c[i]=a[i];
for(j=0;j<n;j++)
c[m+j]=b[j];
printf("\nc数组元素:");
for(i=0;i<m+n;i++)
printf("%d ",c[i]);
//排序
printf("\n合并后的数组为:");
merge(c,d,0,m-1,m+n-1);
//输出最终结果
for(i=0;i<m+n;i++)
printf("%d ",d[i]);
printf("\n");
//system("pause");
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户81285
2011-09-25 · TA获得超过114个赞
知道答主
回答量:285
采纳率:0%
帮助的人:147万
展开全部
void TwoMins(T Num[N],T a,T b)
这个函数参数有问题啊,你传进来的a,b是临时变量,函数体无法修改Min1,Min2的值,你可以看看a,b的值是对的,但是Min1,Min2的值是错的。

修改:void TwoMins(T Num[N],T &a,T &b)
调用:TwoMins(Array,&Min1,&Min2);
追问
我的a b在哪里?我怎么看不见啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ymj4645
2011-09-25 · TA获得超过3494个赞
知道小有建树答主
回答量:580
采纳率:37%
帮助的人:260万
展开全部
楼主应该贴出错误情况,这样方便别人判断出错位置
只看代码,似乎楼主没有定义数组类型,就直接用了(这句scanf("%d",&a[i]);),编译器不会报错?
追问
木有报错啊 所以我不知道是那里错了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式