我正在嘗試找到最小交換以在 python 中對沒有重復的陣列進行排序。我有以下代碼,我正在使用貪婪的方法對陣列進行排序并相應地比較和交換
def minimumSwaps(arr):
totalswapcount=0
sortedarr=sorted(arr)
for x in range(0,len(arr)-1):
if (arr[x]!=sortedarr[x]):
totalswapcount =1
arr[x],arr[arr.index(sortedarr[x])]=arr[arr.index(sortedarr[x])],arr[x]
print(totalswapcount)
minimumSwaps([2,3,4,1,5])
由于某種原因,該代碼不會在第一次迭代時與該空運行交換。陣列重復,因此它在最終結果中添加了一個迭代。這是該空運行的結果

我期待在第一次重復之后,陣列將變為 [1,3,4,2,5],其中 1 和 2 被交換,因為 2 占據 1 的實際位置,但它保持不變
uj5u.com熱心網友回復:
當你分配給
arr[x],arr[arr.index(sortedarr[x])]=
它在已經分配給arr.index(sortedarr[x]) 后計算下標arr[x]。獲取擴展分配之外的索引,因此如果元素已移動到較低的索引,它將使用元素的新索引。
if (arr[x]!=sortedarr[x]):
totalswapcount =1
y = arr.index(sortedarr[x])
arr[x], arr[y] = arr[y], arr[x]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522069.html
標籤:Python数组算法
上一篇:求解二叉樹最大和所涉及的邏輯
下一篇:將陣列的元素聚合為不大于定義的值
