如何用冒泡排序法对Python矩阵中的单列进行升序排序?
矩阵单列冒泡升序排序实现
原代码问题分析
你的代码存在两个核心问题:
- 循环逻辑错误:冒泡排序单列时,应遍历列的行索引完成完整的冒泡过程,原代码嵌套循环的遍历逻辑仅交换了部分相邻元素,无法实现全列排序。
- 数据关联性缺失:若需保持矩阵行数据的完整性(排序单列时对应整行同步移动),原代码仅交换单列元素会导致行数据错乱。
正确的冒泡排序实现(单列排序+整行交换)
以下是针对矩阵指定列进行冒泡升序排序的代码,排序时整行会随单列元素的交换同步移动,确保数据关联:
def sort_column(matrix, col_index): n = len(matrix) # 冒泡排序:逐轮将当前列最大元素"冒"到末尾 for i in range(n - 1): for j in range(n - i - 1): # 比较当前列的相邻元素 if matrix[j][col_index] > matrix[j + 1][col_index]: # 交换整行,保持行数据完整 matrix[j], matrix[j + 1] = matrix[j + 1], matrix[j] # 格式化打印排序后的矩阵 for row in matrix: print(' '.join(f'{num:.3f}' for num in row)) return matrix # 示例矩阵(替换为你的实际矩阵) A = [ [3.141, 2.718, 1.618], [1.000, 0.577, 4.669], [2.000, 3.000, 5.000] ] # 对第0列执行排序(可修改col_index指定其他列) sorted_A = sort_column(A, 0) print()
代码说明
col_index参数用于指定要排序的列索引(如第0列传0,第1列传1)。- 外层循环控制排序轮数,内层循环负责每一轮的相邻元素比较与整行交换。
- 若仅需单独排序单列元素(不移动整行),可将交换逻辑改为仅交换
matrix[j][col_index]与matrix[j+1][col_index],但该场景在矩阵操作中极少用到。
内容的提问来源于stack exchange,提问作者Fecozoo
相关产品推荐
相关产品推荐

