如何使用Bubble Sort按消息长度对二维string数组进行排序
使用冒泡排序对2D字符串数组按消息长度排序的实现
核心逻辑
我们需要按二维数组第0列存储的消息字符串长度排序,冒泡排序过程中需要把每一行的两个元素(消息、优先级)作为整体交换,排序默认按长度升序排列,需要降序可自行修改比较条件。
具体实现逻辑如下:
- 首先获取二维数组的总行数
- 外层循环控制排序轮次,总轮次为总行数-1
- 内层循环遍历当前未排序区间的相邻行,比较两行第0列的字符串长度
- 若前一行消息长度大于后一行,交换两行的两个元素
- 可选优化:新增交换标记,某轮没有发生任何交换说明数组已经有序,直接终止排序减少冗余运算
完整排序代码
// 冒泡排序实现:按第0列消息长度升序排列 int rowCount = array.GetLength(0); // 交换标记,用于优化排序效率 bool swapped; for (int i = 0; i < rowCount - 1; i++) { swapped = false; // 每轮排序后末尾i个元素已经有序,不需要再比较 for (int j = 0; j < rowCount - 1 - i; j++) { // 比较相邻两行第0列的字符串长度 if (array[j, 0].Length > array[j + 1, 0].Length) { // 交换第0列的消息内容 string tempMsg = array[j, 0]; array[j, 0] = array[j + 1, 0]; array[j + 1, 0] = tempMsg; // 同步交换第1列的优先级内容 string tempPriority = array[j, 1]; array[j, 1] = array[j + 1, 1]; array[j + 1, 1] = tempPriority; swapped = true; } } // 本轮没有交换,说明已经有序,直接退出 if (!swapped) { break; } }
说明
如果需要按长度降序排序,只需要把判断条件array[j, 0].Length > array[j + 1, 0].Length修改为array[j, 0].Length < array[j + 1, 0].Length即可。
内容的提问来源于stack exchange,提问作者Tomello
相关产品推荐
相关产品推荐

