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

C#中如何按行首元素降序排序二维数组(不使用内置Sort)

二维数组按行首元素降序排序(禁用内置Sort方法)

需求:通过重排行的方式,根据每行首元素对二维数组做降序排序,不能使用内置Sort方法。
示例输入:

1 2 3
4 5 6
7 8 9

期望输出:

7 8 9
4 5 6
1 2 3

原代码的问题

你的冒泡排序代码存在几个关键错误:

  • 遍历索引错误:A[i++, 0]会在判断条件里直接递增i,导致外层循环的遍历顺序完全混乱,跳过或重复处理行
  • 交换逻辑错误:你只在同一行内交换元素,而需求是交换整行,不是调整行内元素顺序
  • 循环变量冲突:内层交换循环复用了j变量,会覆盖外层循环的j值,导致循环逻辑彻底出错

修正后的代码

using System;

namespace BubbleSort
{
    internal class Program
    {
        static void Main(string[] args)
        {
            const int rowCount = 3;
            const int colCount = 3;
            int[,] arr = 
            { 
                { 1, 2, 3 },
                { 4, 5, 6 },
                { 7, 8, 9 },
            };

            // 冒泡排序:按行首元素降序排列整行
            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < rowCount - 1; j++)
                {
                    // 比较相邻两行的首元素,前一行更小则交换整行
                    if (arr[j, 0] < arr[j + 1, 0])
                    {
                        // 交换整行的所有元素
                        for (int k = 0; k < colCount; k++)
                        {
                            int temp = arr[j, k];
                            arr[j, k] = arr[j + 1, k];
                            arr[j + 1, k] = temp;
                        }
                    }
                }
            }

            // 输出排序后的数组
            for (int y = 0; y < rowCount; y++)
            {
                for (int x = 0; x < colCount; x++)
                {
                    Console.Write(arr[y, x] + " ");
                }
                Console.WriteLine();
            }
        }
    }
}

代码说明

  • 用rowCount和colCount分别定义行数和列数,可读性更强
  • 冒泡排序的核心逻辑是比较相邻两行的首元素,如果前一行首元素更小,就交换两行的所有元素
  • 交换整行时用独立的k变量遍历列,避免和外层循环变量冲突
  • 最终输出逻辑保持不变,按行打印数组元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:10:31