python-3.x - 计算排序数组的最小交换次数(选择排序太慢)
问题描述
我正在尝试计算最小交换次数,同时使用整数对无序数组进行排序。
一个例子。
输入;
array = [4, 3, 1, 2]
calculate_swaps(array)
输出;
# Initial array = [4, 3, 1, 2]
# 1st iteration = [1, 3, 4, 2]
# 2nd iteration = [1, 2, 4, 3]
# 3rd iteration = [1, 2, 3, 4]
3 # minimum amount of swaps to sort the array.
我在下面尝试了“选择排序算法”。它有效。由于它以 O(n2) 时间复杂度执行,我的算法需要太多时间来计算大数组(大小 = 50,000)。
这是我的代码。我怎样才能克服这个性能问题?
def calculate_swaps(arr):
min_swaps = 0
minimum = 0
for i in range(len(arr) - 1):
if (arr[i] == i + 1):
continue
minimum = i
for j in range(i + 1, len(arr)):
# Find the smallest value
if arr[j] < arr[minimum]:
minimum = j
# Swap
if minimum != i:
arr[minimum], arr[i] = arr[i], arr[minimum]
min_swaps += 1
return(min_swaps)
解决方案
推荐阅读
- mysql - MySQL INSTR - 匹配确切的子字符串
- php - Laravel - 从 GlobalScope 应用功能内的缓存文件中读取数据
- c# - 异步方法在调用或等待时会抛出异常吗?
- python - Python / PyCharm 缺少参数'self'?
- javascript - 启迪服务器与神社集成“处理大型上传文件大小> 1 gb”
- javascript - 如何启用使用鼠标粘贴内容的按钮?
- xml - 将 XML 节点一分为二(XSLT 转换)
- javascript - 文本框到值进入整数
- angular - 如何在 LineChart.js 中动态使用数据
- javascript - 拒绝应用来自“http://localhost:8081/src/assets/materialIcons.css”的样式,因为它的 MIME