Python中的选择排序不起作用
我正在学习算法,从气泡排序开始,现在开始选择排序。以下是我正在使用的代码:Python中的选择排序不起作用,python,algorithm,sorting,Python,Algorithm,Sorting,我正在学习算法,从气泡排序开始,现在开始选择排序。以下是我正在使用的代码: test = [5, 3, 6, 1, 8, 7, 2, 4] def selection_sort(items): for i in range(0, len(items)-1): minIndex = i for j in range(i + 1, len(items)): if items[j] < items[minIndex]:
test = [5, 3, 6, 1, 8, 7, 2, 4]
def selection_sort(items):
for i in range(0, len(items)-1):
minIndex = i
for j in range(i + 1, len(items)):
if items[j] < items[minIndex]:
minIndex = j
if minIndex != i:
items[i], items[minIndex] = items[minIndex], items[i]
print("Before: ", test)
selection_sort(test)
print("After: ", test)
test=[5,3,6,1,8,7,2,4]
def选择_排序(项目):
对于范围(0,长度(项目)-1)内的i:
minIndex=i
对于范围内的j(i+1,len(项目)):
如果项目[j]<项目[minIndex]:
minIndex=j
如果minIndex!=一:
项目[i],项目[minIndex]=项目[minIndex],项目[i]
打印(“之前:”,测试)
选择和排序(测试)
打印(“后:”,测试)
问题是我从中得到的输出是:[1,3,4,2,5,6,7,8]
当我再次运行它时,我得到了正确的输出:[1,2,3,4,5,6,7,8]
你知道为什么会被抓住吗?谢谢 您实际上做得不对,在每次迭代中,您都将
第i个
位置元素与minIndex
交换,即使它不是实际的minIndex
(您是在内部循环中进行的)
您需要在内部循环之外进行交换,以便在内部循环中找到具有最小值元素的索引,然后交换ith
和minIndex
位置元素
范例-
>>> test = [5, 3, 6, 1, 8, 7, 2, 4]
>>> def selection_sort(items):
... for i in range(0, len(items)-1):
... minIndex = i
... for j in range(i + 1, len(items)):
... if items[j] < items[minIndex]:
... minIndex = j
... if minIndex != i:
... items[i], items[minIndex] = items[minIndex], items[i]
...
>>> selection_sort(test)
>>> test
[1, 2, 3, 4, 5, 6, 7, 8]
测试=[5,3,6,1,8,7,2,4]
>>>def选择_排序(项目):
... 对于范围(0,长度(项目)-1)内的i:
... minIndex=i
... 对于范围内的j(i+1,len(项目)):
... 如果项目[j]<项目[minIndex]:
... minIndex=j
... 如果minIndex!=一:
... 项目[i],项目[minIndex]=项目[minIndex],项目[i]
...
>>>选择和排序(测试)
>>>试验
[1, 2, 3, 4, 5, 6, 7, 8]
谢谢!这很有道理。非常感谢欢迎您,也请记住接受答案,如果您认为这些答案有助于您解决问题,将有助于社区。