輸出:
[9, 99, -5, 5, 1, 3, 777]
代碼:
def selection_sort(nums):
for x in range(len(nums)-1):
min_value = x
for j in range(nums[min_value 1], len(nums)):
if j < nums[min_value]:
min_value = j
if nums[min_value] != x:
nums[min_value], nums[x] = nums[x], nums[min_value]
return nums
nums = [9, 99, 777, 3, 5, 1, -5]
print(selection_sort(nums))
該函式有兩個回圈。第一個使得回圈所在的任何數字(x)都被標識為最小值。第二個回圈遍歷 x 右邊的每個數字,看看是否有一個小于 x 的數字。最后,如果有一個小于 x 的數字,則該數字與 x 交換。
uj5u.com熱心網友回復:
看起來您混淆了哪些變數是索引,哪些是您想要排序的實際數字。
這是您的,但變數更改為一些更令人難忘的名稱。
def selection_sort(nums):
for starting_index in range(len(nums)):
min_index = starting_index
for compare_index in range(starting_index, len(nums)):
if nums[compare_index] < nums[min_index]:
min_index = compare_index
if nums[min_index] != nums[starting_index]:
nums[min_index], nums[starting_index] = nums[starting_index], nums[min_index]
return nums
nums = [9, 99, 777, 3, 5, 1, -5]
print(selection_sort(nums))
uj5u.com熱心網友回復:
有幾個問題,這里是修復:
min_value是一個誤導變數名,因為它包含索引 (x)。for j in range(nums[min_value 1], len(nums)):范圍從值min_value開始,但它應該從 min_value(或 x)開始if j < nums[min_value]正在將候選元素的索引與當前最小值(數字)進行比較。它需要比較索引 j 處的值if nums[min_value] != x:縮進級別錯誤。它需要在for x in ...回圈內,因為您想對 x 的每個值(不僅僅是最后一個)執行交換if nums[min_value] != x:將最小值與索引 (x) 進行比較。它需要將其與索引處的值進行比較x- 該函式對串列進行就地排序,不需要在最后回傳它
...
def selection_sort(nums):
for x in range(len(nums)-1):
min_value = x
for j in range(min_value 1, len(nums)): # range on indexes
if nums[j] < nums[min_value]: # compare values to values
min_value = j
if min_value != x: # indent and compare values to values
nums[min_value], nums[x] = nums[x], nums[min_value]
為了使代碼更小,您可以使用 min() 函式來獲取最小剩余數字的索引:
def selection_sort(nums):
for i in range(len(nums)-1):
j = min(range(i,len(nums)),key=lambda i:nums[i])
nums[i],nums[j] = nums[j],nums[i]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414111.html
標籤:
上一篇:從字典串列中獲取不同的值串列
