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

C++冒泡排序输出异常及数组长度获取问题求助

C++冒泡排序错误排查与解决方案

错误点分析

  1. 内存越界与逻辑错误

    • 原数组myArr包含10个元素,但调用bubbleSort时传入长度为8,仅排序了前8个元素,遗漏后两个元素。
    • bubbleSort返回数组首元素值,你将其赋值给单个int变量newArr,随后调用printArray(&newArr, 8)时,从单个int的地址读取8个int值,后7个均为内存随机垃圾数据,这是输出异常的核心原因——你根本没打印排序后的原数组。
  2. 冒泡排序效率冗余
    内层循环无需每次遍历到数组末尾,每轮冒泡会将当前最大元素移至末尾,因此内层循环应改为j < length - 1 - i,跳过已排序的尾部元素。
    此外bubbleSort返回单个元素无意义,排序直接修改原数组,改为void类型更合理。

修正后的代码

#include <iostream>

void printArray(int *myArr, int length) {
    for (int i = 0; i < length; ++i) {
        std::cout << myArr[i];
        if (i != length - 1) {
            std::cout << ", ";
        }
    }
    std::cout << std::endl;
}

void bubbleSort(int *myArr, int length) {
    for (int i = 0; i < length; ++i) {
        // 优化内层循环,跳过已排序的末尾元素
        for (int j = 0; j < length - 1 - i; ++j) {
            if (myArr[j] > myArr[j+1]) {
                int temp = myArr[j];
                myArr[j] = myArr[j+1];
                myArr[j+1] = temp;
            }
        }
    }
}

int main() {
    int myArr[] = {10,14,13,19,15,12,16,18,17,11};
    // 计算数组实际长度:总字节数/单个元素字节数
    int arrLength = sizeof(myArr) / sizeof(myArr[0]);
    bubbleSort(myArr, arrLength);
    printArray(myArr, arrLength);
    return 0;
}

函数中获取数组长度的简便方法

  • 手动传递长度参数:最常用的方式,调用函数时同步传入数组长度,如你原代码的写法。
  • 模板函数推导长度:利用模板推导原生数组的大小,无需手动传参:
    template <size_t N>
    void bubbleSort(int (&myArr)[N]) {
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N - 1 - i; ++j) {
                if (myArr[j] > myArr[j+1]) {
                    std::swap(myArr[j], myArr[j+1]);
                }
            }
        }
    }
    // 调用示例:bubbleSort(myArr);
    
  • 使用std::array替代原生数组:std::array自带size()方法获取长度,类型更安全:
    #include <array>
    std::array<int, 10> myArr = {10,14,13,19,15,12,16,18,17,11};
    // 直接获取长度
    bubbleSort(myArr.data(), myArr.size());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:30:57