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

自制冒泡排序代码异常求助:随机输入崩溃,有序输入偶正常

冒泡排序代码崩溃与异常输出的问题修复

你的代码核心问题是数组索引越界,直接导致了随机输入时的崩溃和异常输出:

原代码内层循环中,j从1遍历到N-1,然后使用a[i+j]进行比较。当i的值较大时(比如i=8、j=2),i+j会超过数组a的最大下标(数组长度为10,下标范围是0~9),这会访问数组外的非法内存,导致数据错乱(比如输出中的-1847346713、0这类垃圾值),严重时直接触发程序崩溃。

另外,你的排序逻辑也不符合冒泡排序的核心逻辑——冒泡排序是通过相邻元素的比较与交换,将较大的元素逐步“冒”到数组末尾,而不是用a[i]和a[i+j]跨位置比较。

修复后的代码

#include <stdio.h>

int main()
{
    int N=10, max, a[N];
    printf("Enter the numbers:");
    for(int i=0; i<N; i++)
    {
        scanf("%d", &a[i]);
    }
    // 输出原始数组
    for(int i=0; i<N; i++)
    {
        printf("%d,", a[i]);
    }
    printf("\n");
    
    // 修正后的冒泡排序逻辑
    for(int i=0; i<N-1; i++)
    {
        // 每轮排序后,最后i个元素已有序,无需再比较
        for(int j=0; j<N-i-1; j++)
        {
            // 相邻元素比较,大的往后移
            if (a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    
    // 输出排序后的数组
    for(int i=0; i<N; i++)
    {
        printf("%d,", a[i]);
    }
    return 0;
}

修复后的运行输出

用你提供的输入测试,会得到正确的排序结果:

Enter the numbers:78
96
78
5
69
3
7
6
9
2
78,96,78,5,69,3,7,6,9,2,
2,3,5,6,7,9,69,78,78,96,

关键修改点

  • 内层循环改为遍历到N-i-1,避免越界,同时利用冒泡排序的特性减少不必要的比较
  • 将比较对象改为相邻的a[j]和a[j+1],符合冒泡排序的核心逻辑
  • 外层循环只需执行N-1次,因为最后一个元素会自动归位

内容的提问来源于stack exchange,提问作者Ashutosh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:45:35