前言
Python每日一練來啦,本文已收錄於:《Python每日一練》專欄
此專欄目的在於,幫忙學習Python的小白提高編程能力,訓練邏輯思維,每周持續更新中,歡迎免費訂閱!!!
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩余未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與數據移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。
看明白了運行流程,我們再來看看動圖實現:
實現代碼:
import random
# random庫隨機生成列表
sec_list = [random.randint(1, 100) for i in range(8)]
# 獲取當前列表長度
length = len(sec_list)
print("未排序的列表:" % sec_list)
# 外層循環
for i in range(length - 1):
min_index = i
# 內層循環從認為最小的那個數後一位開始,一直到結束
for j in range(i + 1, length):
# 如果最小的元素大於後面的元素
if sec_list[min_index] > sec_list[j]:
# 重新賦值最小元素
min_index = j
# 當內層循環執行一整輪後交換位置
sec_list[min_index], sec_list[i] = sec_list[i], sec_list[min_index]
print("第%s輪排好序的是:%s" % (i + 1, sec_list))
print("最終排好序的結果為:%s" % sec_list)
運行結果:
- 最優時間復雜度:
O(n2)
- 最壞時間復雜度:
O(n2)
- 穩定性:不穩定(考慮升序每次選擇最大的情況)
- 選擇排序與冒泡排序一樣,需要進行
N*(N-1)/2
次比較,但是只需要N次交換,當N很大時,交換次數的時間影響力更大,所以選擇排序的時間復雜度為O(N^2)
。- 雖然選擇排序與冒泡排序在時間復雜度屬於同一量級,但是毫無疑問選擇排序的效率更高,因為它的交換操作次數更少,而且在交換操作比比較操作的時間級大得多時,選擇排序的速度是相當快的。
1. 編程小白選手
很多剛入門編程的小白學習了基礎語法,卻不知道語法的用途,不知道如何加深映像,不知道如何提升自己,這個時候每天刷自主刷一道題就非常重要(百煉成神),可以去牛客網上的編程初學者入門訓練。該專題為編程入門級別,適合剛學完語法的小白練習,題目涉及編程基礎語法,基本結構等,每道題帶有練習模式和考試模式,可還原考試模式進行模擬,也可通過練習模式進行練習。
鏈接地址:牛客網 | 編程初學者入門訓練
2. 編程進階選手
當基礎練習完已經逐步掌握了各知識要點後,這個時候去專項練習中學習數據結構、算法基礎、計算機基礎等。先從簡單的入手,感覺上來了再做中等難度,以及較難的題目。這三樣是面試中必考的知識點,我們只有堅持每日自己去多加練習,拒絕平躺持續刷題,不斷提升自己才能沖擊令人滿意的公司。
鏈接地址:牛客網 | 專項練習
速度上號,大家一起沖擊大廠,有疑問評論區留言解答!!!