选择排序问题:为什么列表中最大的元素放在列表的最前面?
Selection Sort Issue: Why is the biggest element of the list put at the front of the list?
我一直在使用 Python 3 练习 SELECTION SORT 以及我从文件中读取的列表列表。我正在尝试按每个内部列表 (List[i][0]) 的第一个元素的升序打印列表。
这是我的清单:
[[130.0, 266.07], [46.0, 174.14], [169.0, 187.01], [179.0, 488.69], [53.0, 401.53], [128.0, 106.88], [97.0, 398.33], [152.0, 493.87], [ 20.0, 205.43], [94.0, 248.14]]
但是,使用此代码:
def swapElements(aList, a, b):
temp = aList[a]
aList[a] = aList[b]
aList[b] = temp
def selection_sort(aList):
for i in range(0, len(aList)):
minimum = 0
for j in range(i, len(aList)):
if aList[j][0] < aList[minimum][0]:
minimum = j
if minimum != i:
swapElements(aList, i, minimum)
print(aList)
输出始终将列表中最大的元素放在开头:
[[179.0, 488.69], [20.0, 205.43], [46.0, 174.14], [53.0, 401.53], [94.0, 248.14], [97.0, 398.33], [128.0, 106.88], [130.0 , 266.07], [152.0, 493.87], [169.0, 187.01]]
任何人都可以解释原因并指出我的代码错在哪里吗?
你的范围有点偏离。与wikipedia article比较。你的符号中的算法:
def swapElements(lst, a, b):
lst[a], lst[b] = lst[b], lst[a]
def selection_sort(aList):
for i in range(len(aList)-1): # -1 is vital!
minimum = i # the minimum index starts at i; not 0
for j in range(i+1, len(aList)): # here it's the +1
if aList[j][0] < aList[minimum][0]:
minimum = j
if minimum != i:
swapElements(aList, i, minimum)
print(aList)
正如我在评论中提到的:python 可以像这样简单地交换值:lst[a], lst[b] = lst[b], lst[a]
.
我一直在使用 Python 3 练习 SELECTION SORT 以及我从文件中读取的列表列表。我正在尝试按每个内部列表 (List[i][0]) 的第一个元素的升序打印列表。
这是我的清单: [[130.0, 266.07], [46.0, 174.14], [169.0, 187.01], [179.0, 488.69], [53.0, 401.53], [128.0, 106.88], [97.0, 398.33], [152.0, 493.87], [ 20.0, 205.43], [94.0, 248.14]]
但是,使用此代码:
def swapElements(aList, a, b):
temp = aList[a]
aList[a] = aList[b]
aList[b] = temp
def selection_sort(aList):
for i in range(0, len(aList)):
minimum = 0
for j in range(i, len(aList)):
if aList[j][0] < aList[minimum][0]:
minimum = j
if minimum != i:
swapElements(aList, i, minimum)
print(aList)
输出始终将列表中最大的元素放在开头:
[[179.0, 488.69], [20.0, 205.43], [46.0, 174.14], [53.0, 401.53], [94.0, 248.14], [97.0, 398.33], [128.0, 106.88], [130.0 , 266.07], [152.0, 493.87], [169.0, 187.01]]
任何人都可以解释原因并指出我的代码错在哪里吗?
你的范围有点偏离。与wikipedia article比较。你的符号中的算法:
def swapElements(lst, a, b):
lst[a], lst[b] = lst[b], lst[a]
def selection_sort(aList):
for i in range(len(aList)-1): # -1 is vital!
minimum = i # the minimum index starts at i; not 0
for j in range(i+1, len(aList)): # here it's the +1
if aList[j][0] < aList[minimum][0]:
minimum = j
if minimum != i:
swapElements(aList, i, minimum)
print(aList)
正如我在评论中提到的:python 可以像这样简单地交换值:lst[a], lst[b] = lst[b], lst[a]
.