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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:02