Python中的冒泡排序,这些参数是什么?

时间:2014-04-02 16:54:57

标签: python sorting bubble-sort

def bbsort(list1):
    for passnum in range(len(list1)-1,0,-1):
        for i in range (passnum):
            if list1[i]>list1[i+1]:
                temp =list1[i]
                list1[i] = list1[i+1]
                list1[i+1] = temp

这是冒泡排序的代码,但-1,0,-1条件下while的用途是什么?

2 个答案:

答案 0 :(得分:9)

您正在查看range() function的参数;数字设置范围从列表长度开始减1,然后降低到1(结束点不包括在范围内)。

所以有3个参数,第一个是len(list1) - 1,第二个是0,第三个是-1

假设列表长度为5,那么range(5 - 1, 0, -1)将生成一个包含4,3,2和1的列表:

>>> list(range(4, 0, -1))
[4, 3, 2, 1]

for循环遍历这些值:

>>> for i in range(4, 0, -1):
...     print(i)
... 
4
3
2
1

for循环将这些数字分配给passnum,下一个嵌套循环使用它来创建新的range()。第一次,内部范围将从0变为len(list1) - 1(不包括),下一次从0len(list1) - 2等,直到最后一次,当它& #39;将从0运行到1,始终排除停止索引。对于长度为5的列表,这意味着内部循环首先将0,1,2,3分配给i,然后分配0,1,2,然后分配0,1,然后分配0。

代码缺少使用Python序列分配来交换元素的机会:

def bbsort(list1):
    for passnum in range(len(list1) - 1, 0, -1):
        for i in range (passnum):
            if list1[i] > list1[i + 1]:
                list1[i], list1[i + 1] = list1[i + 1], list[i]

答案 1 :(得分:1)

第一个-1从输入列表的长度中减去1,因为索引从0开始,而不是1. 0是起始编号(仅需要到达下一个参数)。第二个-1是步骤,以告诉它在范围内向后移动。 例: 范围(5,2,-1)是[5,4,3,2]