我第一次嘗試演算法并嘗試創建順序排序演算法。我想出了下面的代碼。
def SelectionSort(my_list):
prev_num = None
counter = 0
new_list = []
index_num = 0
new_list_counter = 0
for i in my_list:
if my_list.index(i) == 0:
prev_num = i
counter = 1
new_list.append(i)
else:
if i > prev_num:
prev_num = i
counter = 1
new_list.append(i)
else:
prev_num = i
for n in new_list:
if i >= n:
new_list_counter = 1
pass
else:
new_list.insert(new_list_counter, i)
index_num = new_list.index(i)
new_list_counter = 0
my_list.remove(i)
my_list.insert(index_num, i)
break
counter = 1
prev_num = i
return my_list
print(SelectionSort([1, 3, 4, 2, 6, 5]))
print(SelectionSort([3, 4, 2, 6]))
print(SelectionSort([3, 7, 4, 1]))
print(SelectionSort([3, 10, 2, 5]))
雖然它似乎可以很好地對前 3 個串列進行排序,但當涉及到最后一個串列時,它會輸出 [2、3、10、5]。
任何人都可以伸出援手嗎?
uj5u.com熱心網友回復:
我相信您的代碼邏輯可以改進和簡化。但是只要稍作改動,它就可以正常作業,至少對于您的 4 個測驗用例是這樣。
我的解決方案是使用 max() 將“prev_num”保存為串列中現有的最大數字。并且只在每次回圈結束時保存這個值。
def SelectionSort(my_list):
prev_num = None
counter = 0
new_list = []
index_num = 0
new_list_counter = 0
for i in my_list:
if my_list.index(i) == 0:
prev_num = i
counter = 1
new_list.append(i)
else:
if i > prev_num:
counter = 1
new_list.append(i)
else:
for n in new_list:
if i >= n:
new_list_counter = 1
else:
new_list.insert(new_list_counter, i)
index_num = new_list.index(i)
new_list_counter = 0
my_list.remove(i)
my_list.insert(index_num, i)
break
counter = 1
prev_num = i
prev_num = max(new_list) # <-- This is the key: Save at the end of each loop the highest existing number
return my_list
改進:
- 將“prev_num”變數重命名為“highest_num”之類的名稱。
- 可以使用“elif”代替“else - if”
- 注釋代碼,不僅對審閱者有用,對你自己也有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/533653.html
標籤:Python列表算法排序
上一篇:VSCode的內核問題
