簡體   English   中英

Python 中的冒泡排序,這些參數是做什么用的?

[英]Bubble sort in Python, what are these arguments for?

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

這是冒泡排序的代碼,但是在while條件中-1,0,-1什么用呢?

您正在查看range()函數的參數 數字將范圍設置為從列表長度開始,減去 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() 第一次,該內部范圍將從0len(list1) - 1 (不包括),下一次從0len(list1) - 2等等,直到最后一次,當它從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,因為索引從 0 開始,而不是 1。0 是開始編號(僅需要到達下一個參數)。 第二個 -1 是告訴它在范圍內向后移動的步驟。

示例: range(5, 2, -1) 是 [5, 4, 3]

等於范圍(開始,停止,步驟)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM