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

C语言实现选择排序含0元素时失效,求问题原因

选择排序遇0元素失效的问题分析与修复

你的代码核心问题出在select函数的循环终止条件上:

for (j = i + 1; arr[j]; j++)

在C语言中,整数0会被当作布尔值false,当数组遍历到值为0的元素时,循环会直接终止,导致后续元素完全没有被比较。比如你输入的数组[4,1,3,9,0],当select函数遍历到索引4的0时,循环停止,程序根本没把这个0纳入最小值的比较范围,自然无法将它放到正确的位置。

修复方案

修改select函数,新增数组长度参数n,并将循环条件改为基于索引范围的判断(而非元素值):

// 新增n参数,明确遍历范围
int select(int arr[], int i, int n)
{
    int j, minIndex;
    
    minIndex = i;
    // 循环条件改为j < n,确保遍历完所有剩余元素
    for (j = i + 1; j < n; j++)
    {
        if (arr[j] < arr[minIndex])
            minIndex = j;
    }
    return minIndex;
}


void selectionSort(int arr[], int n)
{
    int i, iMin;
    
    for (i = 0; i < n - 1; i++)
    {
        // 调用select时传入n参数
        iMin = select(arr, i, n);
        if (iMin != i)
        {
            int temp = arr[i];
            arr[i] = arr[iMin];
            arr[iMin] = temp;
        }
    }
}

修改后,无论数组中是否包含0,程序都会严格遍历从索引i+1到n-1的所有元素,确保最小值被正确找到并完成交换。用你提供的测试数组[4,1,3,9,0]测试,会得到正确的排序结果[0,1,3,4,9]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:35:26