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

基于Python的归并排序(分治算法)实现二维数组排序

用归并排序(分治算法)对二维数组的子数组单独排序

需求说明

输入二维数组,需对每个子数组分别使用归并排序完成升序排列,示例如下:

输入:array = [['b', 'a', 'c'], [2, 1, 3]]
输出:array = [['a', 'b', 'c'], [1, 2, 3]]

实现代码

def merge(left, right):
    merged = []
    i = j = 0
    # 比较左右两个有序数组的元素,依次加入结果
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1
    # 处理剩余未加入的元素
    merged.extend(left[i:])
    merged.extend(right[j:])
    return merged

def merge_sort(arr):
    # 递归终止条件:数组长度小于等于1时已有序
    if len(arr) <= 1:
        return arr
    # 分治:将数组拆分为左右两半
    mid = len(arr) // 2
    left_sorted = merge_sort(arr[:mid])
    right_sorted = merge_sort(arr[mid:])
    # 合并两个有序子数组
    return merge(left_sorted, right_sorted)

def sort_2d_array(arr):
    # 遍历二维数组的每个子数组,分别应用归并排序
    return [merge_sort(sub_arr) for sub_arr in arr]

# 测试示例
if __name__ == "__main__":
    input_array = [['b', 'a', 'c'], [2, 1, 3]]
    sorted_array = sort_2d_array(input_array)
    print(sorted_array)  # 输出:[['a', 'b', 'c'], [1, 2, 3]]

代码说明

  • merge函数:核心是合并两个已排序的子数组,通过双指针遍历比较元素大小,保证合并后的数组仍然有序,最后处理剩余未遍历完的元素。
  • merge_sort函数:实现分治逻辑,递归将数组拆分为左右两部分,直到子数组长度为1(天然有序),再逐层调用merge合并有序子数组。
  • sort_2d_array函数:遍历输入的二维数组,对每个子数组单独执行归并排序,最终返回处理后的二维数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:00:00