选择排序问题
Selection Sort Problems
我试图在 python 中创建一个简单的选择排序程序,而不使用任何内置函数。我现在的问题是我的代码只对列表的第一位数字进行排序。怎么了?
这是我的选择
def selectionsort(list1):
for x in range(len(list1)):
tiniest = minimum(list1)
swap(tiniest,x,list1)
return(list1)
这是我使用的最小值和交换函数
def swap(index1,index2,list1):
TheList = list1
temp = TheList[index1]
TheList[index1] = TheList[index2]
TheList[index2] = temp
return(TheList)
def minimum(list1):
small = list1[0]
for i in list1:
if i < small:
small = i
return small
输出示例
列表 = [3,2,1,0]
输出 = [0,2,1,3]
似乎 minimum
return 是 list1
中最小元素的值,但您的 swap
需要一个索引。尝试将 minimum
return 作为索引而不是最小元素的值。
一些简化会使它变得更加readable/comprehensible:
def swap(lst, i1, i2):
lst[i1], lst[i2] = lst[i2], lst[i1] # easy-swapping by multi assignment
def minimum(lst, s): # s: start index
min_val, min_index = lst[s], s
for i in range(s+1, len(lst)):
if lst[i] < min_val:
min_val, min_index = lst[i], i
return min_index # return index of minimum, not minimum itself
def selection_sort(lst):
for i in range(len(lst)):
swap(lst, i, minimum(lst, i))
# find min index starting from current and swap with current
我试图在 python 中创建一个简单的选择排序程序,而不使用任何内置函数。我现在的问题是我的代码只对列表的第一位数字进行排序。怎么了?
这是我的选择
def selectionsort(list1):
for x in range(len(list1)):
tiniest = minimum(list1)
swap(tiniest,x,list1)
return(list1)
这是我使用的最小值和交换函数
def swap(index1,index2,list1):
TheList = list1
temp = TheList[index1]
TheList[index1] = TheList[index2]
TheList[index2] = temp
return(TheList)
def minimum(list1):
small = list1[0]
for i in list1:
if i < small:
small = i
return small
输出示例 列表 = [3,2,1,0]
输出 = [0,2,1,3]
似乎 minimum
return 是 list1
中最小元素的值,但您的 swap
需要一个索引。尝试将 minimum
return 作为索引而不是最小元素的值。
一些简化会使它变得更加readable/comprehensible:
def swap(lst, i1, i2):
lst[i1], lst[i2] = lst[i2], lst[i1] # easy-swapping by multi assignment
def minimum(lst, s): # s: start index
min_val, min_index = lst[s], s
for i in range(s+1, len(lst)):
if lst[i] < min_val:
min_val, min_index = lst[i], i
return min_index # return index of minimum, not minimum itself
def selection_sort(lst):
for i in range(len(lst)):
swap(lst, i, minimum(lst, i))
# find min index starting from current and swap with current