簡體   English   中英

為什么這種排序方法在Python中不起作用?

[英]Why doesn't this sorting method work in Python?

我有這段代碼可以對列表進行排序,而無需在python中使用sorted函數。 輸出與預期相反(從最大到最小而不是從最小到最大)

將<更改為>似乎有幫助,但是我不確定為什么會這樣

lista=[2,1,5,1,3,6]

for i in range(len(lista)):
  for l in range(len(lista)):
    if i==l:
      continue
    if lista[l]<lista[i]:
      temp=lista[i]
      lista[i]=lista[l]
      lista[l]=temp


print(lista)

預期輸出列表,該列表將變小到最大,但是得到相反的結果,除非我將<符號更改為>符號,但是我不確定為什么會這樣?

嘗試在紙上寫算法的每個迭代:

i = 0: 2 1 5 1 3 6
i = 1: 1 2 5 1 3 6 
i = 2: 2 1 5 1 3 6

您的問題是for l in range(len(lista)):的內部循環for l in range(len(lista)):每次從0開始,但是您必須從位置i開始。 當您完成內部循環時,將i遞增1,然后對i進行排序之前的所有內容。 如果這種情況下內部循環從頭開始重新啟動,則您將獲得1小於2(在i = 1上),請再次交換它。

lista=[2,1,5,1,3,6]

for i in range(len(lista)):
   for l in range(i, len(lista)):
       if i==l:
           continue
       if lista[l]<lista[i]:
           temp=lista[i]
           lista[i]=lista[l]
           lista[l]=temp

我建議您閱讀有關插入排序選擇排序的信息,以更好地學習此算法。

問題是第二個循環再次遍歷整個列表。 您要做的是改為查看其余元素:

lista = [2, 1, 5, 1, 3, 6]

for i in range(len(lista)):
    # change range to start at i
    for l in range(i, len(lista)):
        if i == l:
            continue
        if lista[l] < lista[i]:
            temp = lista[i]
            lista[i] = lista[l]
            lista[l] = temp

編輯:更具體地說,考慮一下外循環的最后一次迭代會發生什么。 lista[i]將是列表上的最后一個位置,並且每次lista[l]較小時都會交換一次,因此最后您擁有最小的數字作為最后一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM