---
# System prepended metadata

title: 演算法 排序篇

---

---

type: slide

tag: club class

---

# 演算法

## 排序篇

---

## 排序
#### 排序(sorting)，將一組資料一使用者需求，予以重新排列其順序。排序後之資料，優點為容易閱讀、統計分析、與快速搜尋所要之資料。

---

## visualgo 

#### https://visualgo.net/en/sorting

---

## 氣泡排序法

----


#### 從第一個元素開始，比較相鄰元素大小，如果順序有誤，則調整位置，全部掃描過一次後可以確定最後一個元素是全部元素中最大的。接著再掃描第二次...直到全部元素都排序過為止。

---

## 選擇排序法

----

#### 從序列中挑選出最小值，並放在新序列的最後端，直到原本序列中沒有任何元素。

---

## 插入排序法

----

#### 將元素逐一與排列好的元素做比較，並且找到對的位置插入，以此類推

---

## 合併排序法

----

#### 將序列拆成多個子序列，通常從中間將序列拆開直到子序列中的元素數量只有兩個（有可能會剩下一個元素），最後再合併兩個相鄰的子序列做排序。

#### ~~現在不理解沒關係，等等實作的時候就會懂了~~

---

## 快速排序法

----

#### 將序列的第一個元素作為起始點，將所有比起始點小的元素都移動到起始點的左邊，當起始點無法再更動時，將序列的最後一個元素作為第二個起始點，將所有比新起始點大的元素移到右邊，直到新起始點無法更動。

---

## 計數排序法

----

#### 計算序列中每個元素出現的次數，計算完後將每個元素由小到大排序，接著按照排序後的結果重複輸出該元素出現的次數。

---

## 基數排序法

----

#### 先將序列中的元素的個位數做排序，接著是十位數...直到最大的位數被判斷過。

---

## 講這麼多排序法，大家應該很好奇在寫程式的時候會不會用到這些演算法對吧？

----

## 答案是完全不會用到喔！

----

## 畢竟幾乎所有語言都內建有排序功能的函式，所以聰明的人都會使用內建提供的快速排序，省時又省力。