目錄
基本概念
插入排序(Insertion Sort)是一種簡單且直觀的排序演算法,其基本概念是將一個數列分為已排序和未排序兩部分,然後逐步將未排序部分的元素插入到已排序部分的適當位置,直到整個數列都已排序完成。其基本概念如下:
步驟:
- 假設數列的第一個元素被視為已排序部分,而其餘元素被視為未排序部分。
- 從未排序部分選擇第一個元素,將它視為“待插入元素”。
- 開始與已排序部分的元素進行比較,並找到待插入元素在已排序部分中的正確位置。這通常涉及到逐一比較,並將大於待插入元素的元素向右移動,以為待插入元素腾出位置。
- 插入待插入元素到已排序部分的正確位置。
- 重複步驟2至步驟4,直到未排序部分不再包含任何元素,整個數列即完成排序。
特點:
- 插入排序是一種穩定排序(相等元素的相對位置不會改變),因為只有當比較的元素小於待插入元素時才進行插入操作。
- 它的時間複雜度為O(n^2),其中n是數列中的元素數量。在最壞情況下,即當數列是反向排序時,插入排序的效率最低。
- 插入排序在處理小型數據集時可能效率較高,但對於大型數據集,更高效的排序演算法如快速排序和合併排序更適用。
- 插入排序的主要優點是實現簡單,且不需要額外的記憶體空間,因此適用於一些特殊應用場景。
插入排序雖然不是最高效的排序方法,但它是一種重要的排序演算法,有助於理解排序的基本概念。在某些情況下,它仍然是一個有用的工具,特別是當處理小型數據集或需要在數列已經部分有序時進行排序時。
實際應用
以下是使用 Python 實際應用插入排序的範例。我們將對一個數列進行插入排序,以升冪排序數字。
def insertion_sort(arr):
n = len(arr)
for i in range(1, n):
# 待插入元素
key = arr[i]
# 將元素插入到已排序部分的適當位置
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# 測試
my_list = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(my_list)
print("排序後的數列:")
for num in my_list:
print(num, end=" ")
在這個範例中,我們定義了一個名為 insertion_sort
的函數,它接受一個數列 arr
並執行插入排序。在排序過程中,我們從第二個元素(索引1)開始遍歷未排序部分。將當前元素視為“待插入元素”(key
),然後將它插入到已排序部分的適當位置。
我們使用一個 while
迴圈來逐步尋找待插入元素的正確位置,並將大於待插入元素的元素向右移動,以為待插入元素腾出位置。最終,將待插入元素插入到已排序部分的正確位置。
重複這個過程,直到整個數列都已經排序完成。
其他演算法快速通道:
- 【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:運用簡單的套件進行現代運算(第 … 閱讀全文