c - 按照 3 条规则(奇数、偶数、排序)显示输出

标签 c arrays sorting

我试着按照这个规范写:

  1. 我有一个从用户那里读取的数组
  2. 开头必须是奇数
  3. 偶数必须在数组的末尾
  4. 单双数升序

这是我的代码:

更新代码

#include <stdio.h>
#include <stdlib.h>

int n;
int j;

int main(void){
    scanf("%d", &n);
    int arr[n], aux[n], count = 0;
    for(int i = 0; i < n; i++){
        scanf("%d", &arr[i]);
    }

    for(int i = 0; i < n; i++){
        if(arr[i] % 2 != 0){
            aux[i] = arr[i];
            count = i;
        }
        else
        {
            aux[n - j - 1] = arr[i];
            j++;
        }
    }   

    for(int i = 0; i < count; i++){
        if( aux[i] > aux[i+1])
        {
            aux[i]   = aux[i] + aux[i+1];
            aux[i+1] = aux[i] - aux[i+1];
            aux[i]   = aux[i] - aux[i+1];

        }
    }

    for(int i = count; i < n; i++){
        if( aux[i] > aux[i+1])
        {
            aux[i]   = aux[i] + aux[i+1];
            aux[i+1] = aux[i] - aux[i+1];
            aux[i]   = aux[i] - aux[i+1];
        }
    }

    for(int i = 0; i < n; i++){
        printf("%d ", aux[i]);
    }

    printf("\n");

    return 0;
}

但是,输出是错误的。例如,如果我输入数组 4 的维度,并且数组的元素是 4 3 2 1,则输出是:3 2 1 4196848,但我想成为 1 3 2 4。你能帮助我吗? 谢谢!

最佳答案

你有未定义的行为:

int main(){
    int n, arr[n], aux[n] = {}, count = 0;
    scanf("%d", &n);

您希望将什么用作这些数组的大小? n 在您使用 scanf 读取它之前不会被初始化。

除此之外,您应该为 main 提供一个有效的原型(prototype)。

关于c - 按照 3 条规则(奇数、偶数、排序)显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920343/

相关文章:

c - FIFO 队列头指针不正确

python - 在 python 中使用 numpy 对 100x100 数组进行排序

Java 选择排序交换不按预期工作

c - 尝试在 C 中对字符串进行排序时出现段错误

python - 如何从具有数字索引和标题的数据框中获取最大值

c - arp请求和回复使用c socket编程

c - 调试时得到 "?"问号而不是特殊符号

c - 端口更改后 UDP 客户端服务器无法交换消息

arrays - Swift 数组随机插入和删除非常慢

c - 指向结构数组指针数组的二维数组