这是我给出的伪代码:
评论:定义一个函数sort1
INPUT:我的列表中的数字列表
打印初始列表
循环遍历列表中的所有位置;从第二个元素(索引1)开始
评论:此时此列表中从0到i-1的元素已排序 向后循环在位于i左侧的列表中的那些位置j;从位置i-1开始,只要j + 1处的值小于j处的值
交换位置j和j + 1
打印当前列表
这是我提出的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
我不确定我是否正确地做到了。
答案 0 :(得分:0)
正如我在评论中所说的那样,我认为你实际上做有j
(以及i
)与COMMENT谈论的伪代码。但是,在您的代码中,i
是变量pos
,它会使代码中的j
成为i
。
要查看您的代码是否有效,您最初需要一个未排序的列表 - 而不是代码中的my_list=range(1,40)
([1, 2, 3, ... 38, 39]
并且已按数字顺序排列)。
您没有做的一件事是定义sort1()
函数。
以下是本质上是你的代码,但我重命名了两个变量以匹配伪代码COMMENT,并将(大部分)放在函数定义中,它应该是。
除此之外,我必须将变量num_comparisons
和num_swaps
(在psuedocode中没有提到)声明为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