You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言冒泡排序数组错误:第二个元素始终为0

解决冒泡排序数组输出异常的问题

我看你遇到了冒泡排序后数组第二个元素始终为0、最大整数无法正常输出的问题,结合你给出的代码片段,我先梳理下可能的问题根源,再给你完整的修正方案:

问题核心排查

  • 你用了float swap来交换整数元素,这会导致整数转浮点再转回整数时出现精度丢失或赋值错误,尤其是当整数数值较大时,这大概率是第二个元素变成0的直接原因。
  • 你的代码片段只展示了开头部分,缺失了数组元素输入和排序逻辑的完整实现,这部分很可能还存在索引处理不当的小问题。

修正后的完整代码

#include <stdio.h>

int main() {
    int array[20];
    int n;
    int c, d;
    int swap; // 将swap改为int类型,匹配数组元素的整数类型

    printf("Please enter how many numbers you want to sort (up to 20):\n\t");
    scanf("%d", &n);

    // 读取用户输入的数组元素
    printf("Enter %d integers:\n", n);
    for (c = 0; c < n; c++) {
        scanf("%d", &array[c]);
    }

    // 冒泡排序核心逻辑
    for (c = 0; c < n - 1; c++) {
        // 内层循环每次减少c+1次比较,避免重复操作
        for (d = 0; d < n - c - 1; d++) {
            if (array[d] > array[d + 1]) {
                swap = array[d];
                array[d] = array[d + 1];
                array[d + 1] = swap;
            }
        }
    }

    // 输出排序后的数组
    printf("Sorted array in ascending order:\n");
    for (c = 0; c < n; c++) {
        printf("%d ", array[c]);
    }
    printf("\n");

    return 0;
}

关键修正说明

  • 修正交换变量类型:把float swap改成int swap,避免整数与浮点类型转换带来的数值篡改问题,这是解决第二个元素为0的核心步骤。
  • 补全完整逻辑:补充了数组元素输入、冒泡排序的完整循环逻辑,确保索引范围正确,不会出现越界或重复比较的情况。
  • 优化交互格式:调整了输入输出的提示文本,让用户操作更清晰。

你可以替换原有代码测试,应该就能解决当前的输出异常问题了。

内容的提问来源于stack exchange,提问作者John Wintroub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:22:40