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

求助:如何用Bubble Sort对二维数组每行最大值列表升序排序?

问题分析与修正方案

嘿,我帮你找出问题所在了!你的核心问题是没有把每行的最大值存储到一个专门的数组里,而且冒泡排序的逻辑和语法都错了。咱们一步步来修正:

你的代码里的关键错误:

  • 提取每行最大值时,max是循环内的局部变量,每次循环都会被覆盖,根本没法保存所有行的最大值,自然没法对“最大值列表”排序。
  • 冒泡排序部分的语法完全错误(比如max+[1]这种写法根本不合法),循环条件用rows++会导致死循环,而且循环的维度也搞错了(应该针对最大值数组的长度,也就是行数,而不是列数)。

修正后的完整代码

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    int i, j, rows, columns, temp;

    // 初始化随机数种子,确保每次运行生成不同的随机数
    srand(time(0));

    // 获取用户输入的行数和列数
    cout << "How many rows? ";
    cin >> rows;
    cout << "How many columns? ";
    cin >> columns;

    // 创建二维数组(注:C++标准不支持变长数组,若编译器不支持可改用动态分配或vector)
    int array[rows][columns];

    // 填充二维数组为10-90的随机数
    for (i = 0; i < rows; i++) {
        for (j = 0; j < columns; j++) {
            array[i][j] = rand() % 81 + 10; // 修正随机数范围:10-90(原代码会生成10-99)
        }
    }

    // 打印原始二维数组
    cout << "\nOriginal 2D Array:\n";
    for (i = 0; i < rows; i++) {
        for (j = 0; j < columns; j++) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }

    // 创建数组存储每行的最大值
    int max_values[rows];
    // 提取每行的最大值并存入max_values数组
    for (i = 0; i < rows; i++) {
        max_values[i] = array[i][0]; // 初始化当前行最大值为第一个元素
        for (j = 1; j < columns; j++) { // 从第二个元素开始比较
            if (max_values[i] < array[i][j]) {
                max_values[i] = array[i][j];
            }
        }
        cout << "\nLargest element in row " << i << " is: " << max_values[i];
    }

    // 用冒泡排序对max_values数组进行升序排序
    cout << "\n\nSorting the max values using Bubble Sort...\n";
    for (i = 0; i < rows - 1; i++) { // 外层循环:排序轮数,最多需要rows-1轮
        bool swapped = false; // 标记本轮是否有交换,优化冒泡排序
        for (j = 0; j < rows - i - 1; j++) { // 内层循环:每轮比较到未排序的最后一个元素
            if (max_values[j] > max_values[j + 1]) {
                // 交换两个元素
                temp = max_values[j];
                max_values[j] = max_values[j + 1];
                max_values[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) {
            break; // 如果本轮没有交换,说明已经有序,提前结束
        }
    }

    // 打印排序后的最大值列表
    cout << "\nSorted Max Values (Ascending Order):\n";
    for (i = 0; i < rows; i++) {
        cout << max_values[i] << " ";
    }
    cout << endl;

    return 0;
}

额外说明:

  1. 随机数范围修正:你之前的rand()%90+10会生成10到99的数,不符合10-90的需求,所以改成rand()%81+10(90-10+1=81,取模81得到0-80,加10后正好是10-90)。
  2. 变长数组兼容性:C++标准不支持int array[rows][columns]这种变长数组,如果你的编译器不支持,建议改用new动态分配内存或者vector容器。
  3. 冒泡排序优化:加入了swapped标记,若某一轮没有发生交换,说明数组已经有序,可以提前退出循环,提升排序效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:24