1. 程式人生 > >氣泡排序(含python3程式碼)

氣泡排序(含python3程式碼)

氣泡排序
氣泡排序的英文Bubble Sort,是一種最基礎的交換排序。
例:有8個數組成一個無序數列:5,8,6,3,9,2,1,7,希望從小到大排序。
按照氣泡排序的思想,我們要把相鄰的元素兩兩比較,根據大小來交換元素的位置,過程如下:
1)首先讓5和8比較,發現5比8要小,因此元素位置不變。
2)接下來讓8和6比較,發現8比6要大,所以8和6交換位置。
3)繼續讓8和3比較,發現8比3要大,所以8和3交換位置。
4)繼續讓8和9比較,發現8比9要小,所以元素位置不變。
5)接下來讓9和2比較,發現9比2要大,所以9和2交換位置。
6)接下來讓9和1比較,發現9比1要大,所以9和1交換位置。
7)最後讓9和7比較,發現9比7要大,所以9和7交換位置。
這樣一來,元素9作為數列的最大元素,就像是汽水裡的小氣泡一樣漂啊漂,漂到了最右側。
這時候,我們的氣泡排序的第一輪結束了。數列最右側的元素9可以認為是一個有序區域,有序區域目前只有一個元素。
重複以上過程。
原始的氣泡排序是穩定排序。由於該排序演算法的每一輪要遍歷所有元素,輪轉的次數和元素數量相當,所以時間複雜度是O(N^2) 。

程式碼:
>>import random
>>#定義氣泡排序函式
>>def bubble_sort(array):
    for i in range(len(array)):            #外迴圈,每迴圈一次使得有序的數增加一個
        indicator = False            #設定指示器,沒有交換時表示array已經有序,用於結束迴圈
        for j in range(len(array)-1-i):        #內迴圈,每迴圈一次將無須數中最大數提取
            if array[j] > array[j+1]:
                array[j], array[j+1] = array[j+1], array[j]
                indicator = True
        if not indicator:            #沒有交換時,結束迴圈
            break

>>#驗證演算法
>>array = random.sample(range(100), 10)            #隨機取得10個數字
>>print(array)                         #排序前
>>bubble_sort(array)                    #呼叫氣泡排序函式
>>print(array)                        #排序後