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

Python数组最大绝对差值:遍历法与排序法的性能对比咨询

数组最大绝对差值:暴力遍历vs排序法的性能对比

我想写一个for循环,计算数组中所有元素对的绝对差值,最后输出最大的那个。已经写了基础输入代码,但想知道这种暴力遍历方法和「排序后取首尾元素绝对差值」方法的运行速度差异。

示例

输入: {2, 7, 3, 4, 1, 9}
输出: 8 (|1 – 9|)


一、暴力遍历法

先修正基础输入代码(原代码没把输入转为整数,无法计算差值),再实现暴力遍历逻辑:

arr = []
n = int(input("数组元素个数: "))
for i in range(0, n):
    arr.append(int(input('输入元素: ')))

max_diff = 0
# 嵌套循环遍历所有元素对
for i in range(n):
    for j in range(i + 1, n):
        current_diff = abs(arr[i] - arr[j])
        if current_diff > max_diff:
            max_diff = current_diff
print("最大绝对差值:", max_diff)

性能分析

暴力法需要遍历所有n*(n-1)/2个元素对,时间复杂度为O(n²)。当数组元素数量n增大时,耗时会以平方级增长——比如n从100变到1000,耗时会变成原来的100倍。


二、排序法

你之前写的排序法有个小问题:每次添加元素后就排序,会重复执行排序操作浪费性能。修正后的代码应该在所有元素输入完成后再排序一次:

arr = []
n = int(input("数组元素个数: "))
for i in range(0, n):
    arr.append(int(input('输入元素: ')))
# 一次性排序所有元素
arr.sort()
# 排序后首尾元素的差就是最大绝对差值
max_diff = arr[-1] - arr[0]
print("最大绝对差值:", max_diff)

性能分析

排序的时间复杂度为O(n log n),比暴力法的O(n²)高效得多。当n很大时(比如n=10000),排序法的耗时会远低于暴力法——排序只需要做约10000*14≈14万次操作,而暴力法需要做约5000万次操作,差距非常明显。


两种方法的速度对比总结

  • 当n很小(比如n<100):两种方法速度差异几乎可以忽略;
  • 当n增大到几百、几千甚至更大:暴力法的耗时会急剧增加,排序法的优势会越来越显著;
  • 另外,排序法的代码更简洁,逻辑也更直观,不需要写嵌套循环。

内容的提问来源于stack exchange,提问作者André Cunha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:01:00