代码之家  ›  专栏  ›  技术社区  ›  Lasse V. Karlsen

麻省理工的一些课件中的伪代码

  •  0
  • Lasse V. Karlsen  · 技术社区  · 15 年前

    我从来没有太多需要编写大量正式的伪代码,但是需求已经出现了,所以我想我应该选择一些标准来保持代码之间的一致性。

    为此,我挑选了一些“iTunes U”课件视频,其中包括 6.046J / 18.410J Introduction to Algorithms (SMA 5503) .

    在第一个讲座视频中,讲师在黑板上写下插入排序,并写下:

    Insertion-Sort(A, N) // Sorts A[1..n]
      for j ← 2 to n
        do key ← A[j]
          i ← j-1
          while i > 0 and A[i] > key
            do A[i+1] ← A[i]
              i ← i-1
          A[i+1] ← key
    

    所以,我的问题是:

    • 为什么? i ← j-1 什么时候 A[i+1] = key ?也就是说,为什么 ← 在某些情况下,以及 = 在另一个?请注意,在上述代码中, 艾斯 也用于后者,但在网络上提供的讲义中, = 是用的,这只是一个打字错误吗?(我想是这样)
    • 更重要的是,为什么 do key ← A[j] 什么时候 我是J-1 ?什么是如此特殊以至于它需要 do 像这样的命令,还有缩进?

    换句话说,为什么上面的伪代码不是这样写的(加上我的亮点):

    Insertion-Sort(A, N) // Sorts A[1..n]
      for j ← 2 to n
        key ← A[j]                  <-- lost the do here
        i ← j-1                     <-- no indentation
        while i > 0 and A[i] > key
          A[i+1] ← A[i]             <-- lost the do here
          i ← i-1                   <-- no indentation
        A[i+1] ← key
    

    最后一个问题:有人有 代码标准 伪代码在什么地方方便?我的主要目标是一致性,所以我只需要“教”一次接受者。

    2 回复  |  直到 11 年前
        1
  •  1
  •   Will    15 年前

    Structured English 是一种“标准化”的伪代码语言。

        2
  •  0
  •   user2748680    11 年前

    在正常代码中,箭头用作=键。

    伪码中的等号在普通码中用作==

    所以 j <- 1 意思是 j = 1

    J=1 意思是 if( j == 1)