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

整数排序算法出现随机值:负数变为0且无报错(Windows GCC)

问题分析与修复

你的排序代码出现负数变为0的问题,核心原因是数组越界访问引发的未定义行为:

在while循环中,你仅通过intergers[c] > intergers[c-1]判断是否终止,未限制c的最小值。当处理最左侧的负数元素时,c会被不断递减到0,此时继续执行intergers[c-1]等价于访问intergers[-1]——这是数组边界外的内存区域,读写该区域会破坏原有数据或读取垃圾值,最终导致原负数被错误覆盖为0。

修复后的代码

#include <stdio.h>

int main()
{
    int intergers[] = {4, 5, 1, -6, -7};
    int length = sizeof(intergers) / sizeof(intergers[0]);
    int c;
    int i1;
    int i2;

    for (int cursor = 1; cursor < length; ++cursor)
    {
        c = cursor;
        // 添加c > 0的条件,避免越界访问
        while (c > 0)
        {
            if(intergers[c] > intergers[c-1])
            {
                break;
            }
            i1 = intergers[c];
            i2 = intergers[c-1];
            intergers[c] = i2;
            intergers[c-1] = i1;
            --c;
        }
    }
    for (int cursor = 0; cursor < length; ++cursor)
    {
        printf("%i ", intergers[cursor]);
    }
}

修复说明

将原while(true)替换为while(c > 0),确保只有当c大于0时才执行循环内的比较和交换操作,彻底避免访问数组下标为-1的非法内存区域。修复后运行输出会变为正确的升序结果:-7 -6 1 4 5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:45