簡體   English   中英

解釋氣泡排序算法?

[英]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 ,則無需比較元素in (包括)。 我們從n減去i ,剩下元素0i 我們不需要將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.

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