重新排列阵列交替正面和& C中的否定

时间:2015-12-17 00:48:16

标签: c arrays sorting

我需要使用冒泡排序方法重新排列数组,以便交替使用正数和负数,但我不知道如何继续它。我设法将所有正数放在开头,将负数放在最后。 有任何想法吗? 非常感谢你提前!

E.g。 input = {1,3,-4,5,9,-3,-7} // output = {1,-4,3,-3,5,-7,9}

  

int main()
{
    int array[TAM], num, i=0, j=0;

    printf("Ingrese arreglo: ");

    for(i=0; i < TAM -1 && num != 0; i++)
    {
        scanf("%d", &num);
        array[i]=num;
    }

    for(i=0; array[i] != 0 ; i++)
    {
        j++;
    }

    Alternar(array, j);

    //print array
    for(i=0; i < j; i++)
    {
        printf("%d ", array[i]);
    }


    return 0;
}

void Alternar(int array[], int j)
{
    int i=0, aux, pasadas=1;

    for(pasadas=1; pasadas < j; pasadas++)
    {
        for(i=0; i < j - pasadas ; i++)
        {
            if((array[i] > 0 && array[i+1] < 0))
            {
                aux = array[i];
                array[i] = array[i+1];
                array[i+1] = aux;
            }
        }
    }
    int aux1=j;

    for(i=0, j; i<aux; i++, j--)
    {
        array[]=array[j];
    }


}

1 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <string.h>

void Alternar(int array[], int n){//`array` does not include the 0
    int i, j, k, sign;
    sign = (array[0] > 0);//Decide `sign` by the sign of first element.
    for(i = 0; i < n; ++i, sign = !sign){
        if(sign == 1 && array[i] > 0 || sign == 0 && array[i] < 0)
            continue;
        for(j = i + 1; j < n; ++j){
            if(sign == 1 && array[j] > 0 || sign == 0 && array[j] < 0)//find
                break;
        }
        if(j == n)//not find
            break;//return ;
        k = array[j];//save
        memmove(&array[i+1], &array[i], sizeof(int)*(j-i));//shift right
        array[i] = k;//replace
    }
}

int main(void){
    int array[] = {1, 3, -4, 5, 9, -3, -7};
    int i, n = 7;

    Alternar(array, n);

    for(i = 0; i < n; ++i)
        printf("%d ", array[i]);
    puts("");

    return 0;
}