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

C++实现的选择排序算法无法正确对数字进行升序排序求助

错误原因

你代码的核心问题是minIndex变量未在每轮外层循环开始时重置:目前你只在main函数初始化阶段将minIndex设为0,第一轮循环找到全局最小值交换到下标0位置后,后续所有循环都会沿用之前记录的minIndex值,不会从当前未排序区间的起始位置重新查找最小值,最终排序结果不符合预期。

修复后的完整代码
#include <iostream>
#include <string>
using namespace std;

void swap(int arr[], int indexA, int indexB) {
    int tmp = arr[indexA];
    arr[indexA] = arr[indexB];
    arr[indexB] = tmp;
}

int main() {
    int list[] = { -4, 36, -200, 57, 3, 1, 1000, 353, 234, 435, -21353, 90324 };
    int n = sizeof(list) / sizeof(list[0]);
    int i, j, minIndex;

    for (i = 0; i < n - 1; i++) { // 每次将未排序区间的最小值交换到已排序区间末尾
        minIndex = i; // 每轮查找前重置最小值下标为未排序区间第一个元素位置
        for (j = i; j < n; j++) {
            if (list[j] < list[minIndex]) {
                minIndex = j;
            }
        }
        swap(list, i, minIndex);
    }

    for (int i = 0; i < n; i++) {
        cout << list[i] << "\n";
    }

    return 0;
}
核心修改点
  • 调整minIndex的初始化时机,从main函数开头移到外层循环内部的最开始位置
  • 每轮查找最小值前,都将minIndex赋值为当前未排序区间的起始下标i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:30:01