Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的选择排序不起作用_Python_Algorithm_Sorting - Fatal编程技术网

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]
谢谢!这很有道理。非常感谢欢迎您,也请记住接受答案,如果您认为这些答案有助于您解决问题,将有助于社区。