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

在merge sort(归并排序)实现中应在哪里添加比较计数器?

归并排序统计比较次数的修改方法

计数位置说明

归并排序过程中所有的元素值比较,仅发生在合并两个有序子数组的阶段,也就是你代码里第一个while循环的left[i] <= right[j]判断逻辑处,每次执行这个判断就对应一次比较,累加计数即可。
后面两个处理剩余元素的while循环不需要做值比较,不需要计入次数。

推荐实现方案(无全局变量,递归返回计数)

这种方案通过返回值逐层传递各层递归产生的比较次数,逻辑干净无副作用:

def mergesorter(A):
    compare_count = 0
    if len(A) > 1:
        mid = len(A) // 2
        left = A[:mid]
        right = A[mid:]

        # 递归调用累加左右子数组排序的比较次数
        compare_count += mergesorter(left)
        compare_count += mergesorter(right)

        i = j = k = 0
        
        while i < len(left) and j < len(right):
            # 每次进入值判断就计数+1
            compare_count += 1
            if left[i] <= right[j]:
                A[k] = left[i]
                i += 1
            else:
                A[k] = right[j]
                j += 1
            k += 1

        # 剩余元素直接复制,无比较操作
        while i < len(left):
            A[k] = left[i]
            i += 1
            k += 1

        while j < len(right):
            A[k]=right[j]
            j += 1
            k += 1
    # 返回当前层+下层的总比较次数
    return compare_count

调用示例

arr = [3,1,4,1,5,9,2,6]
total_compare = mergesorter(arr)
print("排序后数组:", arr)
print("总比较次数:", total_compare)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:15:05