文章目錄
- 一、冒泡排序
- 二、實體:使用冒泡排序法進行遞增排序
- 三、練習:黃金檔各個電視臺綜藝收視率排名
本系列文章通過 1000(一篇文章表示 1 個實體) 個實體 ,為讀者提供較為詳細的練習題目,以便讀者舉一反三,深度學習,本系列的文章涉及到 Python 知識點包括:Python 語言基礎、運算子和運算式、陳述句和程式結構、串列和元組、字典和集合、字串、正則運算式、函式、面向物件編程、模塊和包、例外處理和程式除錯、檔案和目錄操作、資料庫編程、界面編程、網路編程、WEB 編程、行程和執行緒、網路爬蟲、游戲編程等知識點,由易到難,由淺入深,一步步打下堅實的編程基礎,
本系列文章涉及的演算法包括搜索、回溯、遞回、排序、迭代、貪心、分治和動態規劃等,涉及的資料結構包括字串、串列、指標、區間、佇列、矩陣、堆疊、鏈表、哈希表、線段樹、二叉樹、二叉搜索樹和圖結構等,
本系列文章是筆者為適應當前教育改革的創新要求,更好地踐行語言類課程,滿足實踐教學與創新能力培養的需要,閱讀大量書籍、各大互聯網公司的面試演算法、LintCode、LeetCode、九章演算法和結合筆者近幾年專案經驗撰寫的系列文章,精選了 1000 個趣味性、實用性強的應用實體,從不同難度、不同演算法、不同型別和不同資料結構等方面,將實際演算法進行總結,希望為 Python 編程人員拋磚引玉,由于筆者經驗與水平有限,博文中疏漏及不妥之處在所難免,衷心地希望各位讀者在評論區多提寶貴意見及具體的修改建議,以便筆者進一步修改和完善,
一、冒泡排序
冒泡排序法是觀察水中氣泡變化而創造的排序方法,它的基本原理是從第一個資料開始,比較相鄰資料的大小,如果大小順序有誤,則對調之后再與下一個資料進行比較,就像氣泡逐漸從水底上升到水面上的情況,經過這樣不斷交換之后,就可以找出最后一個資料的正確位置,接著逐步進行交換,直到完成所有資料的排序為止,
冒泡排序法最后的結果也有兩種形式,即遞增數列和遞減數列,接下來用一組資料來詳細講解冒泡排序法的基本原理,
例如,有這樣一組資料:56、20、84、66、13,如下圖所示:

按照遞增順序進行排序,步驟如下:
步驟1:首先用第一個位置的資料56與第二個位置的資料20進行比較,因為20小于56,所以進行交換;然后再用第二個位置的資料56與第三個位置的資料84進行比較,因為56小于84,所以不用交換;再用第三個位置的資料84與第四個位置的資料66進行比較,因為66小于84,所以進行交換;最后用第四個位置的資料84與第五個位置的資料13進行比較,因為84大于13,所以進行交換,這樣就完成了第一次的排序,排序程序如下圖所示:

步驟2:經過第一次排序,已經將最大值84放在了對應的位置,因此在進行第二次排序時比較到13即可,
第二次排序依然從第一個位置開始比較,即比較資料20與56的大小,因為20小于56,所以不需要交換;然后比較資料56與66的大小,因為56小于66,所以不需要交換;最后比較資料66與13的大小,因為66大于13,所以需要交換,這樣就完成了第二次排序,排序程序如下圖所示:

步驟3:經過第二次排序,已經將剩下數列(除84以外)的最大值66放在了對應的位置,因此在進行第三次排序時比較到13即可,
第三次排序依然從第一個位置開始進行比較,即比較資料20與56的大小,因為20小于56,所以不需要交換位置;然后比較資料56與13的大小,因為56大于13,所以需要交換位置,這樣就完成了第三次排序,排序程序如下圖所示:

步驟4:經過第三次排序,已經將數列84,66,56放在了對應的位置,因此在進行第四次排序時比較到13即可,
第四次排序依然從第一個位置開始比較,比較資料20與13進行的大小,因為20大于13,所以需要交換位置,這樣就完成了第四次排序,排序程序如下圖所示:

至此,排序完成,
二、實體:使用冒泡排序法進行遞增排序
使用冒泡排序法為串列:56,20,84,66,13,進行遞增排序,具體代碼如下:
def bubble(data, data_len): # 自定義一個冒泡排序法函式
traversal_times = data_len - 1
for m in range(traversal_times, 0, -1): # 遍歷排序次數
for n in range(m): # 遍歷新資料
if data[n + 1] < data[n]: # 如果資料小于原來的資料
data[n], data[n + 1] = data[n + 1], data[n] # 需要交換位置
print('第 %d 次排序之后的結果是' % (data_len - m), end='') # 提示
for n in range(data_len): # 遍歷每次排序的結果
print('%3d' % data[n], end='') # 輸出結果
print() # 輸出空行
num_list = [56, 20, 84, 66, 13] # 創建數列并初始化
length = len(num_list)
print("原始資料為:") # 提示
for i in range(length): # 遍歷原有資料
print('%3d' % num_list[i], end='') # 輸出結果
print('\n---------------------------') # 輸出分界符
bubble(num_list, length) # 呼叫冒泡排序法函式
print('---------------------------') # 輸出分界符
print("排序之后的資料為:") # 提示
for i in range(length): # 遍歷排序好的新數列的資料
print('%3d' % num_list[i], end='') # 輸出結果
print('') # 輸出空行
程式運行結果如下圖所示:

從上圖所示的運行結果來看,排序的步驟和上述介紹的冒泡排序法步驟完全吻合,
三、練習:黃金檔各個電視臺綜藝收視率排名
如今各個電視臺在每周五的黃金檔會有獨播的綜藝節目,某周的電視臺黃金檔綜藝的收視率情況資料如下:14,27,28,04,21(省略其%),用冒泡排序法把此收視率按照從高到低的順序排序,程式運行結果如下圖所示:

感謝您閱讀本篇博文,希望本文能成為您編程路上的領航者,祝您閱讀愉快!

好書不厭讀百回,熟讀課思子自知,而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請點贊、評論、收藏一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看,
?編碼不易,大家的支持就是我堅持下去的動力,點贊后不要忘了關注我哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276659.html
標籤:其他
下一篇:力扣179:最大數【C++】
