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

如何实现合并两个已排序字符串数组时同步排序的归并算法?

嘿,我来帮你搞定这个两个已排序字符串数组的合并问题!

你已经用冒泡排序把两个数组分别排好序了,接下来要做的其实就是归并排序里的核心合并步骤——这个逻辑专门用来处理两个已排序数组的合并,效率高还不容易出错,完全不用再折腾同步排序那一套。

核心思路

归并合并的逻辑很简单:用两个指针分别盯着两个已排序数组的起始位置,每次对比两个指针指向的元素,把按字母顺序更小的那个放到结果数组里,然后移动对应的指针。等其中一个数组的元素全部处理完,直接把另一个数组剩下的元素追加到结果里就行(因为剩下的元素本身已经是有序的,而且肯定比之前加进去的都大)。

代码实现(以Python为例)

先确认你的冒泡排序是正常工作的(这里给个标准实现参考):

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        # 每次冒泡把最大的元素移到末尾
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True
        # 如果一轮没交换,说明已经有序,提前结束
        if not swapped:
            break
    return arr

然后是关键的合并函数:

def merge_sorted_strings(arr1, arr2):
    merged_result = []
    i = j = 0  # 两个指针分别指向arr1和arr2的起始位置

    # 同时遍历两个数组,选较小的元素加入结果
    while i < len(arr1) and j < len(arr2):
        # 字符串直接用<比较就是按字母顺序(ASCII码)
        if arr1[i] < arr2[j]:
            merged_result.append(arr1[i])
            i += 1
        else:
            merged_result.append(arr2[j])
            j += 1

    # 处理其中一个数组剩下的所有元素
    merged_result.extend(arr1[i:])
    merged_result.extend(arr2[j:])

    return merged_result

测试一下

用你的场景跑一遍示例:

# 你的两个未排序输入列表
list1 = ["banana", "apple", "cherry"]
list2 = ["date", "blueberry", "elderberry"]

# 先分别排序
sorted_list1 = bubble_sort(list1)
sorted_list2 = bubble_sort(list2)

# 合并成整体有序的数组
final_sorted_array = merge_sorted_strings(sorted_list1, sorted_list2)
print(final_sorted_array)

输出结果会是:

['apple', 'banana', 'blueberry', 'cherry', 'date', 'elderberry']

为啥之前的尝试没效果?

你之前想在合并时同步排序,大概率是把两个数组直接拼起来再排序,这样虽然能得到结果,但时间复杂度更高(O((m+n)log(m+n))),而用归并合并的方法时间复杂度是O(m+n),效率提升很明显,尤其是数组元素多的时候。而且这种双指针的逻辑逻辑清晰,不容易出bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:25