我似乎无法让我的选择排序工作。有什么想法错了吗?运行时它给了我[5,6,3,1]
THX!
aList = [1,5,6,3]
def selection_sort( aList):
for i in range(len(aList)):
min = i
j = i + 1
for j in range(len(aList)):
if aList[j] < aList[min]:
min = j
swap(aList, min, i)
print(aList)
def swap(aList, x, y):
temp = aList[x]
aList[x] = aList[y]
aList[y] = temp
selection_sort(aList)
答案 0 :(得分:1)
正如我在评论中提到的那样,在我看来你使用j = i + 1
希望它会以某种方式影响后续循环中的j
,但它是一个不同的变量。函数定义中的aList
也是如此,它可以有任何名称,甚至是aList。您的j
会一次又一次地遍历整个列表,因此min
或最小值会在i
的任何位置进行(因此它最终会结束)。所以你需要做的是让你的第二个循环只遍历i
之后的下一个项目。
aList = [1,5,6,3]
def selection_sort(List):
for i in range(len(List)):
min = i
for k in range(i,len(List)):
if List[k] < List[min]:
min = k
swap(List, min, i)
print(List)
def swap(List, x, y):
temp = List[x]
List[x] = List[y]
List[y] = temp
selection_sort(aList)
答案 1 :(得分:0)
def select_sort(l):
for i in range(len(l)):
min_loc = i
for j in range(i+1, len(l)):
if l[j] < l[min_loc]:
min_loc = j
l[min_loc],l[i] = l[i], l[min_loc]
return l