选择排序使用动态数组与指针仅偶数长度数组排序正常问题求助
问题根因
你代码的核心错误是选择排序的元素交换逻辑放错了位置:
- 正确的选择排序逻辑是:内层循环遍历完当前未排序区间,找到最小值的下标
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
相关产品推荐
相关产品推荐

