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
相关产品推荐
相关产品推荐

