数组编程题求解,需要指针
题目:数组a:"1,7,9,11,13,15,17,19"; 数组b:"2,4,6,8,10"两个数组合并为数组c,按升序排列。
想不出来循环怎末写
/************************************************************************ 数组编程题求解,需要指针 题目:数组a:"1,7,9,11,13,15,17,19"; 数组b:"2,4,6,8,10" 两个数组合并为数组c,按升序排列。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 根据题意,写出下面的小程序,如有错误,欢迎指出。谢谢。 ************************************************************************/ #include<stdio.h> #include<string.h> void px(int *p,int i,int j)/*设定px函数形参为指向数组c的指针p,待排序数组的前端下标,后端下标*/ { int I,J,V,t; I=i; /*为I、J赋值为数组前、后端下标值*/ J=j; V=*(p+(i+j)/2); /* V值为数组中间数据的值,作为参照值*/ while(1) { while(i<J&&*(p+i)<V) /*如果数组下标到达后端,或者数据大于参照值,跳出循环*/ ++i; /*此时的i值即为交换数据的下标*/ while(j>I&&*(p+j)>V) /*同上,不过是后端数据有小于参照值的,跳出循环*/ --j; if(i>j) break; /*如果i值大于j值,说明已经是排好序,跳出循环*/ if(i<j) /*如果i值小于j值,就进行交换*/ { t=*(p+i); *(p+i)=*(p+j); *(p+j)=t; } ++i; --j; } if(i<J) /*如果前端下标未移动到后端,说明还未完成排序,返回px函数继续排序*/ px(p,i,J); if(j>I) /*同上*/ px(p,I,j); } int main(void) { int a[]={1,7,9,11,13,15,17,19}; int b[]={2,4,6,8,10}; int c[13]; int i,j; for(i=0;i<8;++i) c[i]=a[i]; for(j=0;j<5;++j) c[j+i]=b[j]; printf("组合后的数组:\n"); for(i=0;i<13;++i) printf(" %d",c[i]); puts(" "); px(c,0,12); printf("排序后的数组:\n"); for(i=0;i<13;++i) printf(" %d",c[i]); puts(""); getch(); }