输入数组例如是Array [10] = {12,23,0,-7,138,22,7,99,10,-2}
我想在一端打印出偶数的数组,在另一端打印奇数,如下所示:Array [10] = {12,0,-2,10,22,138,-7,99,7 ,23}
int main()
{
int N = 0, i = 0, j = N-1, index = 0;
printf("Enter N (0>N<10): ");
scanf("%d", &N);
int Array[N];
for(i=0;i<N;i++){
printf("Enter the value number %d :", i+1);
scanf("%d", &Array[i]);
}
printf("Array[%d] ={",N);
for(i=0;i<N;i++){
printf("%d\t", Array[i]);
}
printf("}");
// swaping odd and even numbers
int Array2[N];
while (i < j){
if(Array[i]%2 == 0){
Array2[i] = Array[index];
i++;
}
else{
Array2[j] = Array[index];
j++;
}
index++;
}
// view the new array
printf("\n Array[%d] ={",N);
for(i=0;i<N;i++){
printf("%d\t", Array2[i]);
}
printf("}");
return 0;
}
这似乎不起作用。任何帮助将不胜感激。
注意:我知道Array [N]部分不是它应该如何完成的,它只是为了简化事情。
答案 0 :(得分:0)
这是我想出的一个想法。我还没有测试过,这取决于你 (这只是伪代码)。
array[n] = {...}
newarray[n]
i = 0
j = n-1
index = 0
while (i < j){
if (array[index] is even)
newarray[i] = array[index]
i = i + 1
else
newarray[j] = array[index]
j = j -1
index = index + 1
}
答案 1 :(得分:0)
这类似于Quicksort的Partition部分,除了通过将它们与pivot进行比较而不是分割元素,您使用它们的偶数/奇数。一个好处是不需要第二个“刮擦”阵列。 (你的例子似乎并不关心任何一方的顺序,只是正确的分区。)
int i = 0;
int j = n-1;
while ( i < j ) {
// Invariant: Array[0..i-1] are even and Array[j+1..n-1] are odd
while ( Array[i] % 2 == 0 ) // Array[0..i] is even
i++;
while ( Array[j] % 2 == 1 ) // Array[j..n-1] is odd
j--;
if ( i < j ) { // Array[j] and Array[i] are in the wrong sides
// Swap them into the correct sides
int temp = Array[i];
Array[i] = Array[j];
Array[j] = temp;
// Now we can extend each correct side
i++;
j--;
}
}