---
# System prepended metadata

title: 選擇排序 - Selection Sort
tags: [實習額外加分題]

---

###### tags: `實習額外加分題`

選擇排序 - Selection Sort
===

> 排序其實是演算法在提的東西(大概大三)
> 但 Orange 很壞，想要你們自己先去了解，因為現在的你其實已經可以學會了。
> 所以大家好好加油喔!
> [name=Orange]

## Description

### 何謂排序?
排序就是經過一個算法之後把一個原本沒按照順序排的數列由小到大(或由大到小)排好。

### 那何謂選擇排序 Selection Sort?

選擇排序主要會一直重複兩個步驟，分別如下。這邊統一由小到大舉例。
1. 在數列中找到最小值
    * 從未排序的數列中找到最小值
2. 丟到最左邊
    * 把找到的最小值丟到未排序好的數列的最左邊(與原本最左邊的數值做交換)，並把第一個數值標示為以排序好

> 圖片參考自網路上大神筆記
> [連結在這](https://medium.com/appworks-school/%E5%88%9D%E5%AD%B8%E8%80%85%E5%AD%B8%E6%BC%94%E7%AE%97%E6%B3%95-%E6%8E%92%E5%BA%8F%E6%B3%95%E5%85%A5%E9%96%80-%E9%81%B8%E6%93%87%E6%8E%92%E5%BA%8F%E8%88%87%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E6%B3%95-23d4bc7085ff)
![](https://i.imgur.com/0HDYWAO.png)

> 這邊不討論時間複雜度那些困難的東西，
> 我這邊只想讓你們訓練邏輯跟程式而已。
> 有興趣你到了高年級就知道了，希望你們能過撐過國暉的考驗。
> [name=Orange]

透過上面這張圖了解選擇排序的運作之後，請你設計一個程式來達成選擇排序，我們**統一由小到大排**好。

## Constraint
* 請設計一個一維陣列來儲存你的這些數字
* 並請符合 Selection Sort 的規則
* 數列最多輸入10個數字


**Sample Input1:**
```
7
41 33 17 80 61 5 55
```
**Sample Output1:**
```
5 17 33 41 55 61 80
```

---

**Sample Input2:**
```
9
6 3 16 52 89 71 93 63 42
```
**Sample Output2:**
```
3 6 16 42 52 63 71 89 93
```

<!-- answer
 #include <iostream>
using namespace std;

int main(){
	int arr[9]={6,3,19,52,89,71,93,63,42};
	int flag = 0, min = 0;
	while(flag < sizeof arr / sizeof arr[0]-1){
		min = flag;
		for(int i = flag + 1; i < sizeof arr / sizeof arr[0]; i++){
			if(arr[i] < arr[min]) {
				min = i;	
			}
		}
		//swap
		temp = arr[min];
		arr[min] = arr[flag];
		arr[flag] = temp;
		//increment
		flag++;
	}
	//output
	for(int i = 0; i < sizeof arr / sizeof arr[0]; i++){
		cout << arr[i] << " "; 
	}
    return 0;
}
-->