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
相关产品推荐
相关产品推荐

