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