選擇排序(Selection Sort)演算法是最基本的排序演算法,是學習程式語言最先需要學會的排序演算法之一。它可以按照元素值的大小序次,一一將最小值、第二小值等等的元素排入序列中的正確索引位置內。
選擇排序法(Selection Sort)
選擇排序法的概念
選擇排序法是以土法煉鋼的方式按照次序走訪序列中的每個索引位置,並在每次迭代時去往後選擇出剩餘的最小元素值,來與目前的索引位置的元素做交換。如此一來,序列中的元素就能以遞增的方式來排列。
至於要如何「往後選擇出剩餘的最大元素值或最小元素值」呢?我們可以先假設目前索引位置的元素值是最小的,然後再去走訪之後的所有元素,如果發現有比目前索引位置的元素值還小的元素,就把它的索引值記下來,然後再繼續走訪,再用其它走訪到的元素與目前記下的索引位置的元素值進行比較,如果又發現更小的,就再把索引值記下。如此一來,剩餘的元素走訪完之後,就知道其中最小值的索引位置了。如果這個索引位置並不是目前走訪到的索引位置,就把這兩個索引位置的元素做交換。
所以說,在走訪到序列的第一個元素,並按照上述方式處理完成之後,序列的第一個元素必定會是最小值。在走訪到序列的第二個元素,並按照上述方式處理完成之後,序列的第二個元素必定會是第二小值。
選擇排序法的過程
假設現在有個陣列資料,內容如下:
索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79
要如何將它遞增排列呢?
一開始,要將重點聚焦於陣列最前端的位置,因為我們要先將整個陣列的最小值交換到陣列的最前端。
先假設目前陣列最前端的元素為最小值。
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 →
再與其之後的元素比大小,若找到比目前假設最小元素還小的元素,就記下索引值,如下表:
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 69 < 81
因為69
比81
小,所以再比較下一個索引值的元素的大小,如下表:
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 69 > 30
69
比30
大,所以目前最小元素的索引位置變成2
。
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 →
持續向後判斷大小並更改當前最小元素的索引位置,直到判斷至最尾端:
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 30 < 38 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 30 > 9 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 9 > 2 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 2 < 47 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 2 < 61 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └──┬──┘ 2 < 32 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └───┬───┘ 2 < 79 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 ◎
判斷至最尾端後,即可找到最小元素的位置,再將最前端的元素和最小元素交換,如下表:
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └─────────┘
接著用同樣的方法繼續找出第二小的元素,並將其交換至前端第二個位置,再找出第三小的元素,並將其交換至前端第三個位置。直到所有元素位置都被確認過之後,陣列就排序完成了!完整過程如下:
● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 69 < 81 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 69 > 30 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 30 < 38 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 30 > 9 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 9 > 2 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 2 < 47 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 2 < 61 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └──┬──┘ 2 < 32 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └───┬───┘ 2 < 79 ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 ◎ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └─────────┘ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 → ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └┬┘ 81 > 30 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 → ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └┬┘ 30 < 38 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └┬┘ 38 > 9 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 → ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └┬┘ 9 < 69 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └─┬─┘ 9 < 47 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └──┬──┘ 9 < 61 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └───┬───┘ 9 < 32 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 └────┬────┘ 9 < 79 ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 30 38 9 69 47 61 32 79 ◎ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └─────┘ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 → ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └┬┘ 30 < 38 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └─┬─┘ 30 < 81 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └──┬──┘ 30 < 69 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └───┬───┘ 30 < 47 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └────┬────┘ 30 < 61 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └─────┬─────┘ 30 < 32 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └──────┬──────┘ 30 < 79 ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 ◎ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 → ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └┬┘ 38 < 81 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └─┬─┘ 38 < 69 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └──┬──┘ 38 < 47 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └───┬───┘ 38 < 61 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └────┬────┘ 38 > 32 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 → ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └┬┘ 32 < 79 ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 ◎ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └─────────┘ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 → ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └┬┘ 81 > 69 ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 → ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └┬┘ 69 > 47 ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 → ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └┬┘ 47 < 61 ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └─┬─┘ 47 > 38 ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 → ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └┬┘ 38 < 79 ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 ◎ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 └───────┘ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 → ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 └┬┘ 69 > 47 ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 → ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 └┬┘ 47 < 61 ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 └─┬─┘ 47 < 81 ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 └──┬──┘ 47 < 79 ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 47 61 81 79 ◎ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 └─┘ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 → ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 └┬┘ 69 > 61 ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 → ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 └┬┘ 61 < 81 ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 └─┬─┘ 61 < 79 ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 61 81 79 ◎ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └─┘ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 → ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └┬┘ 69 < 81 ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └─┬─┘ 69 < 79 ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 ◎ ○ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 → ○ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └┬┘ 81 > 79 ○ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 → ○ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 ◎ ○ ○ ○ ○ ○ ○ ○ ○ ● ※ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 79 81 └─┘ ○ ○ ○ ○ ○ ○ ○ ○ ○ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 79 81
選擇排序法的程式實作
選擇排序法的複雜度
以#{{n}}#來表示要排序的資料筆數。
項目 | 值 | 備註 |
---|---|---|
最差時間複雜度 | #{{O(n^2)}}# | |
最佳時間複雜度 | #{{O(n^2)}}# | |
平均時間複雜度 | #{{O(n^2)}}# | |
最差空間複雜度 | #{{O(1)}}# | |
是否穩定 | 否 |
交換排序法(Exchange Sort)
交換排序法的概念
交換排序法與上面介紹的選擇排序法非常類似,只不過交換排序法不使用而外的空間來儲存走訪序列時找到的當前最小元素的索引值,而是直接將找到的較小元素進行交換。由於這個演算法需要在序列中一直做交換元素的動作,因此在絕大部分情況下會比選擇排序法還慢,幾乎沒有人會想使用這個演算法,這也是為什麼筆者會將它放到這篇文章的最後來做介紹。
交換排序法的過程
假設現在有個陣列資料,內容如下:
索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79
要如何將它遞增排列呢?
一開始,要將重點聚焦於陣列最前端的位置,因為我們要先將整個陣列的最小值交換到陣列的最前端。
● 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 →
再與其之後的元素比大小,若找到比目前走訪到的元素還小的元素,就直接進行交換,然後繼續往下找;若沒找到比目前走訪到的元素還小的元素,就不進行交換,然後繼續往下找。完整過程如下:
● 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 → ● 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └┬┘ 69 < 81 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 └─┬─┘ 69 > 30 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 69 81 30 38 9 2 47 61 32 79 ◎ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 30 81 69 38 9 2 47 61 32 79 └───┘ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 30 81 69 38 9 2 47 61 32 79 └──┬──┘ 30 < 38 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 30 81 69 38 9 2 47 61 32 79 └───┬───┘ 30 > 9 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 30 81 69 38 9 2 47 61 32 79 ◎ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 9 81 69 38 30 2 47 61 32 79 └───────┘ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 9 81 69 38 30 2 47 61 32 79 └────┬────┘ 9 > 2 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 9 81 69 38 30 2 47 61 32 79 ◎ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └─────────┘ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └─────┬─────┘ 2 < 47 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └──────┬──────┘ 2 < 61 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └───────┬───────┘ 2 < 32 ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └────────┬────────┘ 2 < 79 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 → ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 81 69 38 30 9 47 61 32 79 └┬┘ 81 > 69 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 69 81 38 30 9 47 61 32 79 ◎ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 69 81 38 30 9 47 61 32 79 └─┘ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 69 81 38 30 9 47 61 32 79 └─┬─┘ 69 > 38 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 38 81 69 30 9 47 61 32 79 ◎ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 38 81 69 30 9 47 61 32 79 └───┘ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 38 81 69 30 9 47 61 32 79 └──┬──┘ 38 > 30 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 30 81 69 38 9 47 61 32 79 ◎ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 30 81 69 38 9 47 61 32 79 └─────┘ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 30 81 69 38 9 47 61 32 79 └───┬───┘ 30 > 9 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 ◎ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └───────┘ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └────┬────┘ 9 < 47 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └─────┬─────┘ 9 < 61 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └──────┬──────┘ 9 < 32 ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └───────┬───────┘ 9 < 79 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 → ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 81 69 38 30 47 61 32 79 └┬┘ 81 > 69 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 69 81 38 30 47 61 32 79 ◎ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 69 81 38 30 47 61 32 79 └─┘ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 69 81 38 30 47 61 32 79 └─┬─┘ 69 > 38 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 38 81 69 30 47 61 32 79 ◎ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 38 81 69 30 47 61 32 79 └───┘ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 38 81 69 30 47 61 32 79 └──┬──┘ 38 > 30 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 ◎ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └─────┘ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └───┬───┘ 30 < 47 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └────┬────┘ 30 < 61 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └─────┬─────┘ 30 < 32 ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └──────┬──────┘ 30 < 79 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 → ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 81 69 38 47 61 32 79 └┬┘ 81 > 69 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 69 81 38 47 61 32 79 ◎ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 69 81 38 47 61 32 79 └─┘ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 69 81 38 47 61 32 79 └─┬─┘ 69 > 38 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └───┘ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └──┬──┘ 38 < 47 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └───┬───┘ 38 < 61 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 38 81 69 47 61 32 79 └────┬────┘ 38 > 32 ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 ◎ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └─────────┘ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └─────┬─────┘ 32 < 79 ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 → ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 81 69 47 61 38 79 └┬┘ 69 < 81 ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 69 81 47 61 38 79 ◎ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 69 81 47 61 38 79 └─┘ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 69 81 47 61 38 79 └─┬─┘ 69 > 47 ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 47 81 69 61 38 79 ◎ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 47 81 69 61 38 79 └───┘ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 47 81 69 61 38 79 └──┬──┘ 47 < 61 ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 47 81 69 61 38 79 └───┬───┘ 47 > 38 ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 81 69 61 47 79 ◎ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 81 69 61 47 79 └───────┘ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 81 69 61 47 79 └────┬────┘ 38 < 79 ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 81 69 61 47 79 → ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 81 69 61 47 79 └┬┘ 81 > 69 ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 81 61 47 79 ◎ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 81 61 47 79 └─┘ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 69 81 61 47 79 └─┬─┘ 69 > 61 ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 61 81 69 47 79 ◎ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 61 81 69 47 79 └───┘ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 61 81 69 47 79 └──┬──┘ 61 > 47 ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 81 69 61 79 ◎ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 81 69 61 79 └─────┘ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 81 69 61 79 └───┬───┘ 47 < 79 ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 81 69 61 79 → ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 81 69 61 79 └┬┘ 81 > 69 ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 81 61 79 ◎ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 81 61 79 └─┘ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 69 81 61 79 └─┬─┘ 69 > 61 ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 81 69 79 ◎ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 81 69 79 └───┘ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 81 69 79 └──┬──┘ 61 < 79 ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 81 69 79 → ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 81 69 79 └┬┘ 81 > 69 ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 ◎ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └─┘ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └─┬─┘ 69 > 79 ○ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 → ○ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 81 79 └┬┘ 81 > 79 ○ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 79 81 ◎ ○ ○ ○ ○ ○ ○ ○ ○ ● 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 79 81 └─┘ ○ ○ ○ ○ ○ ○ ○ ○ ○ 索引 0 1 2 3 4 5 6 7 8 9 數值 2 9 30 32 38 47 61 69 79 81
交換排序法的程式實作
交換排序法的複雜度
以#{{n}}#來表示要排序的資料筆數。
項目 | 值 | 備註 |
---|---|---|
最差時間複雜度 | #{{O(n^2)}}# | |
最佳時間複雜度 | #{{O(n^2)}}# | |
平均時間複雜度 | #{{O(n^2)}}# | |
最差空間複雜度 | #{{O(1)}}# | |
是否穩定 | 否 |