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

C++传值实现的bubbleSort冒泡排序函数无法生效问题求助

问题分析与修复方案

核心问题

  • 参数为值传递:你当前定义的bubbleSort函数的两个int参数属于值拷贝传递,函数内部对i、j的修改仅作用于函数栈内的临时副本,不会回写到main函数的numbers数组元素中,这是排序完全不生效的根本原因。
  • 你当前的两层循环逻辑已经实现了选择排序的比较逻辑,只需要修复bubbleSort的参数问题即可得到升序结果。

修复方案(满足不传递数组、仅传两个待比较元素的要求)

方案1:使用C++引用参数(推荐,代码改动最小)

修改bubbleSort的函数声明、定义,将参数改为引用类型,函数内修改会直接映射到原始变量:

#include <iostream>

using namespace std;
// 函数声明改为引用参数
void bubbleSort(int&, int&);

int main(){   
    const int size = 10;
    int numbers[size] = { 100, 33, 49, 23, 84, 2, 72, 17, 82, 64 };

    for (int i = 0; i < size; i++) {
        cout << numbers[i] << " ";
    }

    for (int i = 0; i < size; i++) {
        for (int j = i+1; j < size; j++) {
            bubbleSort(numbers[i], numbers[j]);
        }
    }
    cout << "\n";
    for (int i = 0; i < size; i++) {
        cout << numbers[i] << " ";
    }
    return 0;
}

// 函数定义改为引用参数
void bubbleSort(int &i, int &j) {
    int temp;
    if (i > j) {
        temp = i;
        i = j;
        j = temp;
    }
}

运行输出:

100 33 49 23 84 2 72 17 82 64 
2 17 23 33 49 64 72 82 84 100 

方案2:使用指针参数(严格传值逻辑,传递地址值)

如果要求参数必须是值传递类型,可以传递元素的地址值,仅需修改调用逻辑和函数定义即可:

#include <iostream>

using namespace std;
// 函数声明改为指针参数
void bubbleSort(int*, int*);

int main(){   
    const int size = 10;
    int numbers[size] = { 100, 33, 49, 23, 84, 2, 72, 17, 82, 64 };

    for (int i = 0; i < size; i++) {
        cout << numbers[i] << " ";
    }

    for (int i = 0; i < size; i++) {
        for (int j = i+1; j < size; j++) {
            // 传递元素地址
            bubbleSort(&numbers[i], &numbers[j]);
        }
    }
    cout << "\n";
    for (int i = 0; i < size; i++) {
        cout << numbers[i] << " ";
    }
    return 0;
}

// 函数定义改为指针参数
void bubbleSort(int *i, int *j) {
    int temp;
    if (*i > *j) {
        temp = *i;
        *i = *j;
        *j = temp;
    }
}

运行结果和方案1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:01