Python 伪代码的冒泡排序实现

Python 伪代码的冒泡排序实现,python,pseudocode,bubble-sort,Python,Pseudocode,Bubble Sort,这是我的伪代码 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 e

这是我的伪代码

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
我得到的输出是3,5,89,-4,7,45,100,这意味着它只在内部循环中进行第一次传递,但在之后立即停止


伪代码中有什么我翻译错了吗?

您在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

您可能需要重新读取伪代码,看看它是否真的是这么说的。

在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
您可能需要重新阅读伪代码,看看它是否真的这么说。

以下是您的答案

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)
这是你的答案

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)

创建帖子时,我遗漏了伪代码中的一行重要内容。最后取内循环中j的值。我编辑了这篇文章。在创建文章时,我遗漏了伪代码中的一行重要内容。最后取内循环中j的值。我编辑了这个操作。问题是,在你的内部循环中,你从来没有使用最后一个,所以从来没有真正需要使用它。第二,你想遍历这个列表,所以你想递减1,因为你从nYes开始,我需要在内部循环中使用last。我更新了伪代码。您的bubblesort工作得很好,但是来自pswudocode的版本使用了额外的变量,应该会使排序更有效。哦,我知道您试图做什么了。如果你看这个,他们会很好地解释如何使用额外的变量来帮助你。是的,我看到了。他们添加的额外变量只是为了检查内部循环的整个过程是否结束而没有交换。如果发生这种情况,我们知道数组已经排序,只需退出即可。为赋值提供的伪代码似乎并没有做到这一点,因为在内部循环中,您从来没有使用过last,所以根本就不需要使用它。第二,你想遍历这个列表,所以你想递减1,因为你从nYes开始,我需要在内部循环中使用last。我更新了伪代码。您的bubblesort工作得很好,但是来自pswudocode的版本使用了额外的变量,应该会使排序更有效。哦,我知道您试图做什么了。如果你看这个,他们会很好地解释如何使用额外的变量来帮助你。是的,我看到了。他们添加的额外变量只是为了检查内部循环的整个过程是否结束而没有交换。如果发生这种情况,我们知道数组已经排序,只需退出即可。为赋值提供的伪代码似乎没有这样做。