这是我的伪代码
Procedure
i <- n
last <- 1
while i > last do
for j <- 1 to i-1 do
if t[j] > t[j+1] do
t[j] <-> t[j+1] {switch values}
last <- j
end if
end for
i <- last
last <- 1
end while
end
我只需说明为什么这是对标准冒泡排序的改进并对算法进行跟踪。我可以管理。为了做一些测试和学习目的,我决定用python编写代码。我的实现不起作用。
def bubbleSort(arr):
n = len(arr)
i = n
last = 1
while (i > last):
for j in range(0, i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
last = j
i = last
last = 1
# Driver code to test above
arr = [5, 3, 89, 100, -4, 7, 45]
bubbleSort(arr)
我得到的输出是3,5,89,-4,7,45,100巫婆意味着它只在内循环中进行第一次传递但是在之后停止。
我的伪代码是否存在错误的翻译?
答案 0 :(得分:1)
你在while循环中做的最后一件事是
i = last
last = 1
由于last
从1开始,在第一次迭代之后,这将同时使i
和last
1.因此,while (i > last)
条件失败并且循环退出。
为了更清楚地看到这一点,这里的代码只包含相关部分:
def bubbleSort(arr):
i = len(arr)
last = 1
while (i > last):
i = last
last = 1
您可能需要重新读取伪代码,看看它是否真的与它说的一样。
答案 1 :(得分:1)
这是你的答案。
def bubbleSort(arr):
n = len(arr)
i = n
last = 1
while (i > last):
for j in range(0, i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
i = i - 1
# Driver code to test above
arr = [5, 3, 89, 100, -4, 7, 45]
bubbleSort(arr)