因此,我正在学习Bubble Sort,并看到了以下代码:
def bubblesort(list_a):
indexing_length = len(list_a) - 1
sorted = False
while not sorted:
sorted = True
for i in range(0, indexing_length):
if list_a[i] > list_a[i+1]:
sorted = False
list_a[i], list_a[i+1] = list_a[i+1], list_a[i] # flip position
return list_a
我尝试在笔记本上运行此代码,以便更好地理解这一点。我尝试了5、2、3、7、10、1、8,过程是这样的:
--> 2, 5, 3, 7, 10, 1, 8
--> 2, 3, 5, 7, 10, 1, 8
--> 2, 3, 5, 7, 1, 10, 8
--> 2, 3, 5, 7, 1, 8, 10
我最终得到了未排序的数组,因为我认为for循环只会执行一次迭代。我理解不对吗?有人可以给我解释一下吗?
答案 0 :(得分:2)
气泡排序是最简单的排序算法,该算法可通过以错误顺序重复交换相邻元素来工作。这种排序算法也称为 Brute Force 方法,原因是在排序过程中,列表中的每个元素都将与同一列表中的每个其他元素进行比较,如果比较的数字不按顺序,则它将调换职位。让我们来看看您的示例列表[5, 2, 3, 7, 10, 1, 8]
。
第一遍:比较0th index(5)
和1st index(2)
并进行比较
if 0th index(5) > 1st index(2)
,它将交换位置,否则不会增加交换计数器。 [ 5 , 2 ,3、7、10、1、8]条件True(5 > 2)
,SWAP [ 2 , 5 ,3、7、10、1、8],然后再次比较[2, 5 , 3 ,7、10、1、8]条件True(5 > 3)
,SWAP [2, 3 , 5 ,7、10、1、8]等。
第二遍:
第三遍:
第四阶段:
第5次通过:
第六次通过:
第七次通过:
[1、2、3、5、7、8、10]
def bubbleSort(arr):
n = len(arr)
for i in range(n):
print(arr[i])
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
print(arr[j], arr[j+1])
arr[j], arr[j + 1] = arr[j + 1], arr[j]
print(arr)
arr = [5, 2, 3, 7, 10, 1, 8]
bubbleSort(arr)
print("Sorted array")
print(arr)
答案 1 :(得分:0)
第一次[2, 3, 5, 7, 1, 8, 10]
循环完成后,列表将为for
,但是sorted
的值为False。由于您仍在while not sorted
循环中,因此该循环中的所有内容都会再次运行,包括另一个从索引0开始的for
循环。
这将一直持续到for
循环完成时对列表进行排序为止,因为这会使while
循环的条件为False。