gpt4 book ai didi

c - 在 C 中重新排列交替正负的数组

转载 作者:行者123 更新时间:2023-11-30 15:13:49 25 4
gpt4 key购买 nike

我需要用冒泡排序方法重新排列数组,以便正数和负数交替,但我不知道如何继续。我刚刚设法将所有正数放在开头,将负数放在结尾。有任何想法吗?预先非常感谢您!

例如输入= {1,3,-4,5,9,-3,-7}//输出= {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];
}


}

最佳答案

#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;
}

关于c - 在 C 中重新排列交替正负的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com