在数组中交换奇数和偶数,C

时间:2015-11-26 22:07:27

标签: c arrays

输入数组例如是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]部分不是它应该如何完成的,它只是为了简化事情。

2 个答案:

答案 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--;
    }
}