C语言将数组重新排序,奇数在前,偶数在后,求解

这是我写的程序,不知道哪有问题,老是出现停止工作,而且输出的1变成了一长串数字#include<stdio.h>
void oddseven(int ax[],int n){
int * p=NULL,* pe=NULL;
for(p=ax+0;p<=ax+n-1;p++){
if((* p)%2==0){
* (p+n)=* p;
* p=-1;
}
}
for(p=ax+0;p<=ax+(2*n)-1;p++){
pe=p+1;
while(pe<=ax+2*n-1){
pe++;
}
* p= * pe;
* pe=-1;
}
return;
}
void main(){
int a[20]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int i,j;
printf("请输入十个整数\n");
for(i=0;i<=9;i++){
scanf("%d",&a[i]);
}
oddseven(a,10);
for(j=0;j<=9;j++){
printf("%d,",a[j]);
}
printf("\n");
}

求高手解答

没几个人能看懂别人的程序的。
我最痛苦就是看别人的程序,
让我编这我肯的。
bool isSwap(int a,int b) // 是否要交换
{
if (a %2==0 || b%2 !=0)
return(true); // 前偶,后奇,要交换
if (a %2!=0 || b%2 ==0)
return(false); // 前奇,后偶,不交换
return (a>b); // 同奇同偶,前大后小,要交换
}
void swap(int * a,int * b) // 交换 *a,*b
{
int t=*a;
*a=*b;
*b=t;
}
void oddSort(int d[],int n) // 特殊冒泡排序 ,奇数优先在前
{ int i,j;
for ( i=0;i<n-1;i++)
for ( j=i+1,j<n;j++)
if (isSwap(d[i],d[j])) // 符合交换
swap(&d[i],&d[j]); // 交换
}
你程序中再调用一个上面的子程序就OK了,很短很清晰
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-26
while(pe<=ax+2*n-1){
pe++;
}
这句之后pe已经跑到a[20]的位置了
相似回答