正如我在评论说,我觉得你有效做有j(还有i)关于伪COMMENT会谈。但是,在您的代码中,i是变量pos,这将使您的代码中的j为i。
要查看您的代码是否正常工作,您需要先初始化一个未排序的列表,而不是代码中的my_list=range(1,40)(即[1, 2, 3, ... 38, 39]并已按数字顺序排列)。
你没做的一件事是定义一个sort1()函数。
以下是本质上是您的代码,但我重命名了两个变量以匹配伪代码COMMENT,并将它(大部分)放在它应该是的函数定义中。
除此之外,我不得不宣布(未在伪代码提到的)作为global,使他们可以在外部访问的变量num_comparisons和num_swaps功能,否则他们会一直在默认情况下,只可访问的本地变量内的功能。
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 '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