不按行/列顺序对二维(2D)数组进行整体排序的相关问题
二维数组整体排序实现方案
核心逻辑分为三步即可实现需求:
- 第一步:将二维数组的所有元素展开为一维数组
- 第二步:对一维数组做全量升序/降序排序
- 第三步:将排序后的一维数组按照原二维数组的行列维度拆分,重新组装成二维数组
注:你给出的预期输出示例存在笔误,输入数组中没有
-1和2两个元素,正确排序后回填的结果应为:-4 -2 0 1 3 3 4 5 6 7 8 9
Python 实现示例
def sort_2d_array(arr): # 获取原数组的行列数 rows = len(arr) if rows == 0: return [] cols = len(arr[0]) # 摊平数组后排序 sorted_flat = sorted(num for row in arr for num in row) # 按原维度重组二维数组 return [sorted_flat[i*cols : (i+1)*cols] for i in range(rows)] # 测试用例 input_arr = [ [8,7,9,3], [-2,0,4,5], [1,3,6,-4] ] print(sort_2d_array(input_arr))
JavaScript 实现示例
function sort2dArray(arr) { const rows = arr.length if (rows === 0) return [] const cols = arr[0].length // 摊平数组后排序 const sortedFlat = arr.flat().sort((a,b) => a - b) // 按原维度重组二维数组 return Array.from({length: rows}, (_, i) => sortedFlat.slice(i*cols, (i+1)*cols)) } // 测试用例 const inputArr = [ [8,7,9,3], [-2,0,4,5], [1,3,6,-4] ] console.log(sort2dArray(inputArr))
如果需要降序排序,只需要修改对应排序方法的比较规则即可。
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

