[英]Explain the bubble sort algorithm?
我正在嘗試了解有關算法的更多信息,並且正在研究氣泡排序算法。 我在github上找到了它的腳本,但我無法真正理解它。 我是python的新手,所以有人可以向我解釋此腳本中發生了什么。
from __future__ import print_function
def bubble_sort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
# traverse the array from 0 to n-i-1
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
if __name__ == '__main__':
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
user_input = raw_input('Enter numbers separated by a comma:').strip()
unsorted = [int(item) for item in user_input.split(',')]
print(*bubble_sort(unsorted), sep=',')
將數組可視為數字的垂直列表,第一個元素(索引為0)在底部,最后一個元素(索引為n-1)在頂部。 冒泡排序的想法是使數字“冒泡”到頂部,進入它們所屬的位置。
例如,[2,3,1]首先要看2和3,而不做任何事情,因為它們已經按順序排列了。 然后將看3和1,因為3> 1交換它們,得到[2,1,3]。 然后我們通過查看2和1進行重復,從2> 1開始交換它們以獲得[1,2,3],這是有序的。
這個想法是“ 3”然后是“ 2”冒泡到正確的位置。
請注意,在3冒泡之后,我們不必比較2和3,因為我們知道最后一個元素已經比之前的所有元素都高。 通常,在i
進行冒泡排序迭代之后,無需比較最后的i
元素。
from __future__ import print_function
這里開始,我們實質上引入了別人編寫的代碼,以便我們可以使用它。
def bubble_sort(arr):
這是一個函數定義。 函數定義之前帶有關鍵字def
。 接下來是函數的名稱。 在這種情況下,它稱為bubble_sort
。 括號中的內容稱為參數 。 參數是我們賦予函數的東西,以便函數可以使用它,例如,將參數乘以數字,對列表進行排序或將一些信息發送到服務器。
由於我們的主題是函數,因此建議您查找流程抽象 。
arr
在這里,我指的是函數定義內的arr
。 它是數組的縮寫,是列表類型。 在python中,我們可以定義一個數組,如果fruits = ["banana", "apple", "orange"]
。 數組對於像信息一樣分組很有用,在python中,我相信這實際上稱為列表類型。 因此,從概念上講,想象列表而不是更深奧的數組可能更容易。
n = len(arr)
我們實際上是將數組的長度分配給變量n
。 這可能是元素數量的簡寫。 len(arr)
是一個接受數組/列表並返回其長度的函數。 同樣,可以將print len(arr)
稱為print len(arr)
或簡稱為len(arr)
。
for j in range(0, ni-1):
這有點復雜,因為它需要了解正在使用的算法,即Bubblesort。 由於可能在線上有大量視頻,因此我不會解釋bubbleort的工作原理,但是我將在括號中解釋這一點。
(0, ni-1)
我們想在當前元素和它之前的元素之間進行比較。 當前元素之前的元素大於當前元素。 這意味着,如果我們位於元素i
,則無需比較元素i
到n
(包括)。 我們從n
減去i
,剩下元素0
到i
。 我們不需要將i
與自身進行比較,因此我們減去了額外的1
。 這是由於j
循環遍歷數組,並且可能與i
相同。
if arr[j] > arr[j+1] :
這是一個條件語句,也稱為分支語句或if語句 。 條件arr[j] > arr[j+1]
為真,位置j
的元素大於j+1
的元素。
arr[j], arr[j+1] = arr[j+1], arr[j]
我認為這是交換的簡寫。 一個簡單的交換如下所示。
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
return arr
返回排序后的數組。
最后一點我不熟悉,因為我不太使用python。 也許這對您來說是一些研究。
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.