C语言选择排序函数无法正常排序的问题及正确实现方法
选择排序代码问题修复
核心错误点
你的代码无法完成排序主要有以下几个问题:
- 执行顺序错误:
main函数中return 0写在了排序函数调用和结果打印之前,程序执行到return 0就直接退出,排序逻辑完全没有运行,所以输出始终是原始输入数组。 - 参数传递错误:
selection_sort定义的参数顺序和调用时的传参顺序完全不匹配,就算排序函数能运行也会因为参数错乱出现异常。 - 冗余逻辑错误:
selection_sort内部额外写了读取数组的scanf逻辑,属于无用代码,会干扰正常执行流程。 - 函数定义不规范:
selection_sort声明为int返回类型,但实际没有返回值,应该改为无返回值的void类型。
修正后完整代码
#include <stdio.h> void selection_sort (int a[], int n) { int i, j, temp, min; for(i = 0; i < n; i++) { min = i; // 遍历未排序区间找到最小元素下标 for(j = i + 1; j < n; j++) { if(a[j] < a[min]) { min = j; } } // 交换当前位置和最小元素的位置 temp = a[i]; a[i] = a[min]; a[min] = temp; } } int main() { int i, n, a[20]; printf("How many elements:\n "); scanf("%d", &n); printf("Enter array elements:\n"); for(i = 0; i < n; i++) { scanf("%d", &a[i]); } // 调用排序函数 selection_sort(a, n); // 打印排序结果 printf("Sorted array: "); for(i = 0; i < n; i++) { printf(" %d", a[i]); } return 0; }
优化说明
- 调整了
main函数的执行顺序,先调用排序函数处理数组,再打印结果,return 0放在函数最后执行。 - 简化了
selection_sort的参数,仅保留必要的数组和元素个数两个参数,循环变量、临时变量全部在函数内部定义,避免参数传递出错。 - 删除了排序函数内部冗余的输入逻辑,数组输入统一在
main函数完成。
内容的提问来源于stack exchange,提问作者Tanveer Rifu
相关产品推荐
相关产品推荐

