C语言,怎么使用指针实现合并两个有序数组

这是我写的程序,还请各位同学帮忙看看

第1个回答  2014-03-23
各种语法错误,这个连编译都不行。

i++是指自加1,后面不能加数字;
最上面的解引用那里估计你括号放错了,*号要在括号外面
数字a和数组b,直接int *i=a;就行,不需要再取地址。
printf中,i是一个整数,不能被解引用。追问

- - ,新手才刚刚开始学习。
您方便写个例子,学习学习下

追答

你这个只是简单的合并,就把第二个接在第一个后面,
还是把两个排好序的给归并,保持队列的排序。

本回答被提问者和网友采纳
第2个回答  推荐于2018-05-07
这是c++版的

#include<stdio.h>
#include<stdlib.h>
int* arrange(int *p,int m, int *q,int n){
int *p_last = p+m-1;
int *q_last = q+n-1;
int *pc , *result ;
pc = result= (int *)malloc(sizeof(int));

while(p<=p_last&&q<=q_last){
if(*p<=*q) *result =*p++;
else *result = *q++;

result++;
}

while(p<=p_last){
*result++ =*p++;
}
while(q<=q_last){
*result++ =*q++;
}

return pc;

}

int main(){
int a[]={1,2,3,7,8,9};
int m = 6;//a[]中元素的个数
int b[]={4,5,6};
int n = 3;//b[]中元素的个数
int *i = a;
int *j = b;
i = arrange(i,m,j,n);
for(int k = 0;k<m+n;k++){
printf("%d ",*i++);
}
}
第3个回答  2014-03-23
有较多的错误,以下是正确代码:
#include<stdio.h>
int arrange(int *n,int *m)
{
int i=0,j=0,k;
for(i=0;i<6;i++)
{
if (*(n+i)>*(m+j) && *(n+i)!=0)
{
k=5;
while(k>i)
*(n+k)=*(n+k-1),k--;
*(n+i)=*(m+j);
j++;
}
if(*(n+i)==0)
*(n+i)=*(m+j++);
}
return 0;
}
int main()
{
int a[6]={1,2,5};
int b[3]={4,7,9};
int *i=a;
int *j=b;
int m;
arrange(i,j);
for(m=0;m<6;m++)
printf("%d",a[m]);
return 0;
}
第4个回答  2014-03-23
i++2 这条语句有误吧 你改下i+=2
(*n+d)=.........这里的i 改成d
= =! 你的三目运算用的有点蛋疼

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网