我想创建一个使用冒泡排序技术对数组进行排序的程序,但是只发生第一次迭代。我需要帮助来了解为什么会这样。
a=[10,4,5,2,0,6]
def srt(element):
element1=element[:]
element2=element[:]
idx=1
for x in element:
for y in element2[idx:]:
if x>y:
element1[idx]=x
element1[idx-1]=y
print(element1)
idx+=1
else:
pass
我想显示排序的所有步骤
答案 0 :(得分:2)
您的代码在语义上是错误的。您不是在比较相邻的元素。
您的代码...
for x in element:
for y in element2[idx:]:
if x>y:
会将列表的第一个元素与列表中从idx开始的所有其他元素进行比较。
气泡排序通过比较相邻元素并将“最大/最小”元素“冒泡”到每次遍历列表的末尾而起作用。
在Interactivepython.org上找到的这段代码通过从列表的开头迭代到(len of list) - (number of iterations)
来工作,因此在第一次传递时,它将最大的元素冒泡到列表的末尾。在第二遍时,它将第二个最大的元素冒泡到列表中的倒数第二个位置……等等。
def bubbleSort(alist):
for passnum in range(len(alist)-1,0,-1):
for i in range(passnum):
if alist[i]>alist[i+1]:
temp = alist[i]
alist[i] = alist[i+1]
alist[i+1] = temp
https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort.html