目錄
基本概念
選擇排序(Selection Sort)是一種簡單的排序演算法,它選擇數列中的最小(或最大)元素,將其放在已排序部分的末尾,然後繼續選擇下一個最小(或最大)元素,逐漸擴展已排序的部分。其基本概念如下:
步驟:
- 尋找數列中的最小(或最大)元素,並記錄其索引。
- 將最小(或最大)元素與數列的第一個元素交換位置,將最小元素放在已排序部分的末尾。
- 接著,在剩餘的未排序部分中重複步驟1和步驟2,找到第二小(或第二大)的元素,並將其與已排序部分的下一個位置交換。
- 重複以上過程,直到整個數列已經排序完成。
特點:
- 選擇排序是一種不穩定的排序方法,因為相等元素的相對位置可能改變。
- 它的時間複雜度為O(n^2),其中n是數列中的元素數量。由於其時間複雜度較高,選擇排序不適用於大型數據集。
- 選擇排序不受初始數列的排列情況影響,總是需要O(n^2)次比較和O(n)次交換操作。
- 選擇排序的主要優勢在於其簡單易懂的實現方式,以及在某些情況下,當記憶體開銷要求較高時,它可能比其他排序方法更具優勢。
實際應用
以下是使用 Python 實際應用選擇排序的範例。我們將對一個數列進行選擇排序,以升序排序數字。
def selection_sort(arr):
n = len(arr)
for i in range(n):
# 找到未排序部分的最小元素的索引
min_index = i
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j
# 將最小元素與已排序部分的末尾元素交換位置
arr[i], arr[min_index] = arr[min_index], arr[i]
# 測試
my_list = [64, 34, 25, 12, 22, 11, 90]
selection_sort(my_list)
print("排序後的數列:")
for num in my_list:
print(num, end=" ")
在這個範例中,我們定義了一個名為 selection_sort
的函數,它接受一個數列 arr
並執行選擇排序。在排序過程中,我們使用兩個嵌套的 for
迴圈。外部迴圈用於遍歷未排序部分,而內部迴圈用於找到未排序部分的最小元素的索引 min_index
。
一旦找到最小元素的索引,我們將它與已排序部分的末尾元素進行交換,將最小元素放在已排序部分的末尾。這樣,每次遍歷都會將一個最小的元素放在已排序部分,並繼續下一個遍歷,直到整個數列已經排序完成。
最後,我們輸出排序後的數列,確認選擇排序的正確性。
儘管選擇排序不是最高效的排序方法,但它是一種簡單易懂的排序演算法,用於理解排序的基本概念非常有價值。在實際應用中,尤其是對於小型數據集,選擇排序可能仍然是可行的。
其他演算法快速通道:
- 【Python】什麼是演算法?
- 【Python】Stack(堆疊) 資料結構實作
- 【Python】linear search 線性搜尋
- 【Python】binary search 二分搜尋
- 【Python】Bubble Sort 泡沫排序
- 【Python】Selection Sort 選擇排序
- 【Python】Insertion Sort 選擇排序
- 【Python】Quick Sort 快速排序
- 【Python】Single Linked List(單向鏈結串列) 資料結構實作
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(1)
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(2)
線上學習平台推薦
udemy
我自己最愛用的學習平台是 udemy ,當初會選擇在 udemy 上學習的原因除了課程便宜(當初買的很多課程都300塊左右,是台幣喔台幣!)。
上課時間也可以自己控制(對自律的人來說是一大好處!)
雖然可能有些人會覺得,Youtube上不也很多Tutorials嗎?性質應該差不多吧?而且免費。
雖然看Youtube上也有教學影片,但其實你會發現,這些老師都有另外開課程。
原因也很簡單,只要我們付費購買了他的課程,他就能提供更多的資源來輔助學習,且更有組織的教學過程,甚至有被公司認可的證書。
這就是在免費的youtube上沒辦法做到的。
想知道更多的話,歡迎到【2023】10個使用線上平台學習的好處|學生、工程師、各行各業皆適用 看完整介紹。
推薦入門書籍
精通 Python:運用簡單的套件進行現代運算(第二版)
之前開始入坑python時就是用這本打底的(有換封面過)
這本書除了前幾張介紹基本的語法之外
後續幾張開始介紹與python相關的延伸性的功能
非常適合程式設計初學者以及剛要開始學習這個語言的讀者
羅列以下幾點關於本書大綱供大家參考
- 學習簡單的資料類型、基本數學運算與文字操作
- 以Python的內建資料結構處理資料
- 探索Python程式碼結構,包括函式的使用
- 使用模組與套件編寫大型Python程式
- 深入討論物件、類別與其他物件導向功能
- 檢視一般檔案、關聯式資料庫與NoSQL的儲存機制
- 使用Python建構web用戶端、伺服器、API與服務
- 管理系統工作,例如程式、程序與執行緒
- 瞭解並行處理與網路程式設計的基礎
流暢的 Python:清晰、簡潔、有效的程式設計
適合已經有Python程式語言基礎的人
這本書更詳細的介紹有關python的用法
讓我們寫的程式可以更加"Pythonic"
建議可以與英文版同時閱讀
以後在查閱stackoverflow文獻的時候能不因語言而產生隔閡
- Python 資料模型:瞭解特殊方法是讓物件具備一致行為的關鍵
- 資料結構:充分使用內建的型態,並瞭解 Unicode 時代中,文字 vs. bytes 之間的關係
- 函式就是物件:見識 Python 函式是一級物件,並瞭解這個事實如何影響熱門的設計模式
- 物件導向的習慣用法:學習參考、可變性、介面、運算子多載與多重繼承,並建構類別
- 控制流程:藉由 concurrent.futures 與 asyncio 套件,來充分活用情境管理器、產生器、協同程序與並行
- 中繼編程:瞭解特性、屬性描述器、類別修飾器與中繼類別的工作原理
演算法圖鑑
直觀理解,從基礎開始學習,全圖像化step by step,讓不懂程式的人也能利用圖形了解各種演算法的特質跟運作.
雖然內容並沒有程式實作
但內容演算法流程圖片非常精美
非常適合用來教學或以圖像的方式了解演算法的運作!
Python 自動化的樂趣:搞定重複瑣碎&單調無聊的工作(第二版)
如果想使用自動化來增強工作流程效率,大推本書
之前這本書只有英文版
在博客來等了1個月還是沒等到
沒想到在2020/08/28 出了中文版
二話不說馬上看看人家都是怎麼用python來完成例行公事的
除了運用Python寫出程式,在幾分鐘內搞定人工手動處理需要花費數小時的工作。
探索Python豐富的模組程式庫來完成某些特定工作
例如從網站上抓取資料、讀取PDF和Word文件,以及自動化執行滑鼠點按和鍵盤輸入的工作。
‧在一個或多個檔案中搜尋文字
‧建立、更新、搬移和重新命名檔案和資料夾
‧搜尋網頁和下載網路上的圖文內容
‧處理PDF檔的分割與合併,加入浮水印和加上密碼等作業
‧傳送Email和簡訊
‧填寫線上表單
- 【SSH】製作SSH key教學製作SSH key 1. 打開終端機(Bash/Terminal) 2. 輸入指令 3. 將指定的 SSH 私 … 閱讀全文
- 【快速架站】什麼是Hexo? 5分鐘快速架站教學What is Hexo? Hexo 是一個快速、簡單且強大的網誌框架。Hexo 使用 Markdown(或其 … 閱讀全文
- 【Python】Quick Sort 快速排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Insertion Sort 插入排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Selection Sort 選擇排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文