【发布时间】:2012-09-20 22:49:16
【问题描述】:
我正在尝试解决...
在一个数组中,我们必须将所有奇数元素移到开头...将偶数元素移到结尾...
我试过这种方式,但这里甚至失去了秩序......有人可以帮助我吗??????
我得到的输出是 ...1 3 5 7 9 4 8 2 6
期待一个线性的时间解决方案......
#include<stdio.h>
void swap(int *p,int *q)
{
*p=*p^*q;
*q=*p^*q;
*p=*p^*q;
}
int main()
{
int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
int odd=0;
int even=0;
int arr_size = sizeof(arr)/sizeof(arr[0]);
while(even< arr_size){
if(arr[even]&1)
swap(&arr[odd++],&arr[even++]);
else
even++;
}
int i=0;
for(i=0;i<arr_size ;i++)
printf("%d ",arr[i]);
return 0;
}
【问题讨论】:
-
预期输出为 1,3,5,7,9,2,4,6,8,9
-
最后是奇数还是偶数?你想要对奇数和埃文斯进行排序吗?
-
想要即使在最后...不需要排序...
-
所以你说你得到的输出是 1 3 5 7 9 4 8 2 6 。那有什么问题/
-
嗯,OP好像把
9当成偶数了。