資料結構之內部排序--氣泡排序
阿新 • • 發佈:2018-11-13
概要
-IDE:Pycharm
-Python版本:python3.x
-演算法分類:內部排序->交換類排序->氣泡排序
演算法思想
反覆掃描待排序記錄序列,在掃描過程中順次比較相鄰元素,若逆序則交換位置。
以升序為例:在第一趟氣泡排序中,從第一個記錄開始,掃描整個待排序列,若相鄰逆序,交換位置。掃描過程中,不停的將較大的關鍵字向後移,最大的數字必然在第一趟之後排到最後。
對前$n-1$個序列進行同樣的操作,其結果是使次大的數字排到第$n-1$的位置上。直到$n=1$排序完畢。
演算法分析
氣泡排序演算法的最壞情況是待排序列記錄按關鍵字逆序排序列,此時第$i$趟氣泡排序需進行$n-i$次比較,$3(n-i)$次移動。經過$n-1$趟排序之後,總的比較次數為$\sum_{i=1}^{n-1}n-i=n(n-1)/2$,總的移動次數為$3n(n-1)/2次。
穩定性與時間複雜度
排序演算法 | 穩定性 | 時間複雜度 | 最好情況 | 最壞情況 | 空間複雜度 |
---|---|---|---|---|---|
氣泡排序 | 穩定 | $O(n^2)$ | $O(n)$ | $O(n^2)$ | $O(1)$ |
Python程式碼清單
# !/usr/bin/python3 # _*_ coding:utf-8 _*_ # 氣泡排序 import time, sys, random def BS(number,maxNumber): # 生成隨機數 timeStart = time.time() # 記錄開始時間 listA = [] # 空的列表,用於存放生成的隨機數。 for i in range(0, number): #開始生成隨機數 listA.append(random.randint(0, maxNumber)) timeEnd = time.time() # 結束時間 timeIs = timeEnd - timeStart # 生成隨機數花費的時間。 print('生成%d個數花費的時間是%f' % (number, timeIs)) print(listA) #################################################### #氣泡排序演算法 timeStart = time.time() for itme in range(number): # 外層的迴圈,從零開始迴圈 for itme2 in range(0, number-1-itme): # 內層迴圈,從0開始迴圈。切記迴圈到陣列元素個數減一。否則會out of index if listA[itme2] > listA[itme2+1]: # 判斷大小 mid = listA[itme2+1] # 中間變數 listA[itme2+1] = listA[itme2] # 賦值給後一個變數 listA[itme2] = mid # 複製給前一個變數 timeEnd = time.time() timeIs = timeEnd - timeStart print(listA) # 輸出排好的list print('排序%d個數花費的時間是%f' % (number, timeIs)) if __name__ == '__main__': helpInfo = ''' This program is for Bubble Sort. How to use it! Follow the example! python Bubble_Sort.py 10 100 The 10 representative will generate ten numbers. 100 representative the max-number you make. ''' command = sys.argv[0:] # 從鍵盤接受傳來的引數 if len(command) != 3 or 'help' in command: # 驗證引數是否時三個和是否有‘help’存在 print(helpInfo) # 列印幫助 else: try: number = int(command[1]) # 嘗試將輸入轉化為int型,這個是產生隨機數的總個數 maxNumber = int(command[1]) # 這個事產生隨機數的最大數。 except ValueError: # 檢測到值錯誤 print(helpInfo) # 列印幫助文字 sys.exit(1) # 退出程式 BS(number, maxNumber) # 若以上都無誤,呼叫氣泡排序演算法。
有什麼問題請聯絡我
QQ:3116316431 (請附上資訊)
E-mail:[email protected]