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

选择排序使用动态数组与指针仅偶数长度数组排序正常问题求助

问题根因

你代码的核心错误是选择排序的元素交换逻辑放错了位置:

  • 正确的选择排序逻辑是:内层循环遍历完当前未排序区间,找到最小值的下标min后,仅执行1次交换操作,把最小值换到已排序区间的末尾
  • 你现在把交换代码写在了内层for(j=i+1;j<size;j++)的循环体内部,每次比较都执行一次交换,破坏了数组元素的原有顺序,偶数大小排序正确只是随机巧合,并非逻辑正确。

修正后的排序逻辑

// selection sort algorithm
for(i=0;i< size-1;i++)
{
    min = i;
    // 内层循环仅负责找最小值下标,不交换
    for(j=i+1;j<size;j++)
    {
        if(*(ptr+j) < *(ptr+min))
        {
            min = j;
        }
    }
    // 找到最小值后,仅执行一次交换
    temp = *(ptr+i);
    *(ptr+i) = *(ptr+min);
    *(ptr+min) = temp;
}
// End of algorithm

其他可优化项

  • conio.h不属于C标准库,你当前代码没有用到该库的任何函数,可以直接删除该头文件引用
  • calloc返回值不需要强制转换为int*,C语言中void*可以隐式转换为任意指针类型
  • 动态分配的内存使用完后需要调用free(ptr)释放,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03