该代码不适用于某些测试用例。
def bubbleSort(array):
l = 0
r = 1
isSorted = False
while not isSorted:
isSorted = True
while r <= len(array)-1:
if array[r] < array[l]:
swap(l, r, array)
isSorted = False
l += 1
r += 1
return array
def swap(i, j, array):
array[i], array[j] = array[j], array[i]
return
任何人都可以帮助我解决此问题吗?
您需要将[r]和[l]重新初始化回r = 1
内部的l = 0
和while not isSorted:
。否则,您将只运行一次完整循环,因为在第一次迭代结束时,r已经在len(array)
就您的代码而言,每次isSorted
为False
时,您都必须遍历所有元素。因此,每次执行外部l = 0
循环时,都必须初始化r = 1
和while
。
不需要使用两个计数器变量l
和r
,您可以按如下所示简单地实现冒泡排序:
def bubbleSort(array):
isSorted = False
while not isSorted:
isSorted = True
for i in range(1, len(array)):
if array[i] < array[i - 1]:
swap(i, i - 1, array)
isSorted = False
return array
def swap(i, j, array):
array[i], array[j] = array[j], array[i]
return
并且当您执行>>>print(bubbleSort([10, 2, 1, 3, 2, 6, 25]))
输出将是:
[1, 2, 2, 3, 6, 10, 25]