求大神给写一段代码
将n个正整数存放于一个一维数组a中,试设计一个算法,将所有的奇数移动并存放于数组的前半部分,将所有的偶数移动并存放于数组的后半部分,要求尽可能少地使用临时存储单元,并使计算时间达到O(n)。
暂时还没有积分,没办法,求助,好人一生平安。
#include<stdio.h> #define N 100 void sort(int a[N],int n) { int i,j,temp; for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } int main() { int n,i,j,k; int m,p; int a[N]; int b[N],c[N]; printf("please input the nubers of the arrry!\n"); scanf("%d",&n); printf("input the arry!\n"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("the orginal arry is \n"); for(i=0;i<n;i++) printf("%d ",a[i]); putchar(10); i=0; j=0;k=0; while(i<n) { if(a[i]%2!=0) b[j++]=a[i++]; else c[k++]=a[i++]; } sort(b,j);//奇数排序 sort(c,k);//偶数排序 i=0; m=0;p=0; if(i<n) { while(m<j) { a[i++]=b[m++]; } while(p<k) { a[i++]=c[p++]; } } for(i=0;i<n;i++) printf("%d ",a[i]); putchar(10); return 0; }保证运行~~·不知道你的尽量少的用存储空间是啥意思啊,有没有具体点的要求。 西点复试的时候出过这道题,看到这道题很亲切啦~~