文章目錄
- 一、選擇排序
- 二、實體:使用選擇排序法進行遞增排序
本系列文章通過 1000(一篇文章表示 1 個實體) 個實體 ,為讀者提供較為詳細的練習題目,以便讀者舉一反三,深度學習,本系列的文章涉及到 Python 知識點包括:Python 語言基礎、運算子和運算式、陳述句和程式結構、串列和元組、字典和集合、字串、正則運算式、函式、面向物件編程、模塊和包、例外處理和程式除錯、檔案和目錄操作、資料庫編程、界面編程、網路編程、WEB 編程、行程和執行緒、網路爬蟲、游戲編程等知識點,由易到難,由淺入深,一步步打下堅實的編程基礎,
本系列文章涉及的演算法包括搜索、回溯、遞回、排序、迭代、貪心、分治和動態規劃等,涉及的資料結構包括字串、串列、指標、區間、佇列、矩陣、堆疊、鏈表、哈希表、線段樹、二叉樹、二叉搜索樹和圖結構等,
本系列文章是筆者為適應當前教育改革的創新要求,更好地踐行語言類課程,滿足實踐教學與創新能力培養的需要,閱讀大量書籍、各大互聯網公司的面試演算法、LintCode、LeetCode、九章演算法和結合筆者近幾年專案經驗撰寫的系列文章,精選了 1000 個趣味性、實用性強的應用實體,從不同難度、不同演算法、不同型別和不同資料結構等方面,將實際演算法進行總結,希望為 Python 編程人員拋磚引玉,由于筆者經驗與水平有限,博文中疏漏及不妥之處在所難免,衷心地希望各位讀者在評論區多提寶貴意見及具體的修改建議,以便筆者進一步修改和完善,
一、選擇排序
選擇排序法就是反復從未排序的數列中取出最小(或最大)的資料,將其存放在序列的起始位置,然后,再從未排序的元素中繼續尋找最小(或最大)的資料,存放在已排序序列的末尾,以此類推,最后的結果即為已排序好的數列,選擇排序法最后的結果有兩種形式,即遞增數列和遞減數列,下面就對于兩種結果形式的具體排序流程進行描述,
- 結果為遞增排序:首先在未排序數列中取最小值,與數列第一個位置交換;然后再從未排序的數列中取最小值,與數列的第二個位置交換,如此重復,直到排序數列中的資料按照從小到大的順序排序完成,
- 結果為遞減排序:首先在未排序數列中取最大值,與數列第一個位置交換;然后再從未排序的數列中取最大值,與數列的第二個位置交換,如此重復,直到排序數列中的資料按照從大到小的順序排序完成,
接下來用一組資料來詳細講解選擇排序法,例如,有這樣一組資料:56,18,49,84,72,如下圖所示:

按照遞增順序進行排序,步驟如下:
步驟1:找到所示數列中的最小值18與此數列中的第一個元素56交換,如下圖所示:

步驟2:從第二個值開始,找到此數列中(不包含第一個值)的最小值49,再和第二個值 56 交換,如下圖所示:

步驟3:從第三個值開始,找到此數列中(不包含第一、第二個值)的最小值56,由于它本來就是在第三個位置,故不需要進行交換,

步驟4:從第四個值開始,找到此數列中(不包含第一、第二、第三個值)的最小值72,再和第四個值84交換,如下圖所示:

步驟5:數列遞增順序排序完畢,結果如下圖所示:

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

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

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