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

C++中cout执行顺序异常:插入排序后数组未即时打印求助

C++ 插入排序后数组未及时有序输出的问题修复

问题根源

  1. 排序函数调用参数错误:
    在main的循环中,当前数组实际包含size+1个元素(索引从0到size),但调用insertionSort(array, size)时传入的是size,导致排序函数只会处理前size个元素,刚加入的array[size]完全没被排序。比如第一次循环size=0时,传入size=0,排序函数直接跳过所有逻辑。

  2. 插入排序函数逻辑破坏:
    在insertionSort的while循环里修改了外层for的循环变量i,这会打乱外层循环的递增逻辑,导致元素排序不完整甚至出错。

修复后的代码

#include <stdio.h>
#include <iostream>
#include <cstdlib> // 补充calloc需要的头文件

using namespace std;

void insertionSort(int* array, int size) {
    // 改用current变量跟踪当前插入位置,不修改外层循环的i
    for (int i = 1; i < size; i++) {
        int current = i;
        int key = current - 1;

        while (current > 0 && array[key] > array[current]) {
            int tmp = array[current];
            array[current] = array[key];
            array[key] = tmp;

            current -= 1;
            key -= 1;
        }
    }
}

const int ARRAY_MAXSIZE = 5;

int main(void) {
    int *array = (int*)calloc(ARRAY_MAXSIZE, sizeof(int));
    int input;

    cout << "Enter 5 digits\n";
    
    for (int size=0; size < ARRAY_MAXSIZE; size++) {
        cout << size << " index ";
        cin >> input;
        array[size] = input;
    
        // 传入size+1,让排序函数处理全部已加入的元素
        insertionSort(array, size + 1);
        
        for (int j=0; j <= size; j++) {
            cout << array[j] << " "; // 加空格方便查看元素
        }
        cout << '\n';
    }
    free(array); // 释放calloc分配的内存,避免泄漏
}

修复说明

  • 修正参数传递:调用insertionSort时传入size+1,确保排序函数处理从0到size的所有元素,刚输入的元素立刻被纳入排序逻辑。
  • 隔离循环变量:用current代替i作为while循环的操作变量,避免破坏外层for循环的计数逻辑,保证每个元素都能被正确处理。
  • 补充内存释放:添加free(array),这是使用C风格内存分配函数后的必要操作,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:03:26