選擇排序(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)}}# | |
| 是否穩定 | 否 |



