冒泡排序伪代码n-1是什么意思?

时间:2014-08-15 14:26:34

标签: algorithm sorting pseudocode

我对冒泡排序伪代码中的特定行有疑问。

此伪代码取自wikipedia

procedure bubbleSort( A : list of sortable items )
   n = length(A)
   repeat     
     swapped = false
     for i = 1 to  n-1 inclusive do //THIS IS THE LINE I DON'T UNDERSTAND
       /* if this pair is out of order */
       if A[i-1] > A[i] then
         /* swap them and remember something changed */
         swap( A[i-1], A[i] )
         swapped = true
       end if
     end for
     until not swapped
end procedure

我不理解for循环的条件(1到n-1)。我显然必须遍历从索引1处的第二个元素到算法运行的最后一个元素的所有元素。

但是当我读到n-1这个词时,我认为它是最后一个减去1的元素,它会跳过最后一个元素。所以我想我的问题是,在这种情况下,n-1究竟意味着什么?

5 个答案:

答案 0 :(得分:2)

如果n是元素的数量。最高指数为n-1

此行从索引1迭代到最高索引n-1

第一个元素的索引为0。这段代码不会从那里开始,因为它在循环中做了什么。注意i-1部分。

为您举例说明伪代码的作用:

`A ={'C', 'E', 'B', 'D', 'A'}`
`n` = `5`
inner_loop for i  => 1, 2, 3, 4
    i = 1
    if(A[0] > A[1]) => false
    i = 2
    if(A[1] > A[2]) => true
        swap(A[1] , A[2]) => A ={'C', 'B', 'E', 'D', 'A'}
        swapped =  true
    i = 3
    if(A[2] > A[3]) => false
    i = 4
    if(A[3] > A[4]) => true
        swap(A[3] , A[4]) => A ={'C', 'B', 'E', 'A', 'D'}
        swapped =  true

从某种意义上说,这段代码并不是通过元素运行,而是通过相邻元素的比较。

答案 1 :(得分:0)

n-1并不意味着倒数第二个元素。它意味着最后一个元素。

这就是原因:通常在编程中,列表是零索引,这意味着编号从零开始并转到n-1,其中n是长度的清单。循环从i = 1开始,实际上是第二个元素(因为以后你必须将A[i]A[i-1]进行比较 - 这是第一个元素)

答案 2 :(得分:0)

由于大多数编程语言都以索引0开头,因此对于大小为n的数组,您只想从数组索引0到数组索引n-1进行比较。如果你继续n,你将在行中的数组之外进行比较:

if A[i-1] > A[i]

希望这有帮助。

答案 3 :(得分:0)

这是用伪代码编写的,所以我们不确定“语言”如何实现数组索引,但似乎它是0索引的。这意味着如果长度(A)= n = 5,则元素从0到4编号(即A [0]是如何访问第一个元素A [4]是如何访问最后一个元素。)

答案 4 :(得分:0)

排序一直持续到n-1,因为最后一个元素将在最后一次迭代期间自动排序,即在bubblesort的情况下进行第n次迭代