将伪代码翻译成 Python

Translating pseudocode into Python

这是我得到的伪代码:

  1. COMMENT: 定义函数sort1

  2. INPUT: 号码列表我的列表

  3. 打印初始列表

  4. 遍历列表中的所有位置i;从第二个元素开始(索引 1)

    COMMENT:此时这个列表中从0到i-1的元素已经排序完毕 向后循环遍历列表中位于 i 左侧的那些位置 j;从位置 i-1 开始,只要 j+1 处的值小于 j

    处的值,就继续此循环
  5. 交换位置j和j+1的值

  6. 打印当前列表

这是我想出的 python 代码:

#define a function sort1
my_list=range(1,40)
print
print my_list
num_comparisons=0
num_swaps=0
for pos in range (0,len(my_list)-1):
    for i in range(pos+1,len(my_list)): # starting at position i-1 continue this loop as long
                                        # as the value at j+1 is less than the value at j
        num_comparisons+=1
        if my_list[i]<my_list[pos]:
           num_swaps+=1
           [my_list[i],my_list[pos]]=[my_list[pos],my_list[i]]

print my_list
print
print num_comparisons, num_swaps

虽然我不确定我是否做对了。

正如我在评论中所说,我认为您实际上 doj(以及 i)伪代码 COMMENT 谈论.但是,在您的代码中,i 是变量 pos,这将使 j 在您的代码中被命名为 i

要查看您的代码是否有效,您首先需要有一个未排序的列表,而不是代码中的 my_list=range(1,40)(它是 [1, 2, 3, ... 38, 39] 并且已经按数字顺序排列)。

你没有做的一件事是定义一个 sort1() 函数。

下面是本质上是你的代码,但我重命名了这两个变量以匹配伪代码 COMMENT,并将(大部分)放在函数定义中它应该是。

除此之外,我必须将变量 num_comparisonsnum_swaps(伪代码中未提及)声明为 global,以便可以在函数外部访问它们—否则默认情况下它们将是局部变量,并且只能在 函数中访问。

def sort1(items):
    """ Sort given list of items in-place. """
    # allow access to these variables outside of function
    global num_comparisons
    global num_swaps

    # initialize global variables
    num_comparisons = 0
    num_swaps = 0

    # starting at position i-1 continue this loop as long
    # as the value at j+1 is less than the value at j
    for i in range(0, len(items)-1):
        for j in range(i+1, len(items)):
            num_comparisons += 1
            if items[j] < items[i]:
               num_swaps += 1
               [items[j], items[i]] = [items[i], items[j]]

my_list = [6, 3, 7, 2, 9, 4, 5]

print 'my_list before sort:'
print my_list
sort1(my_list)
print 'my_list after sort:'
print my_list
print
print 'num_comparisons:', num_comparisons, ', num_swaps:', num_swaps

输出:

my_list before sort:
[6, 3, 7, 2, 9, 4, 5]
my_list after sort:
[2, 3, 4, 5, 6, 7, 9]

num_comparisons: 21 , num_swaps: 10