# Sorting 介紹
###### tags: `Sort`
<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
body > .ui-infobar {
display: none;
}
.ui-view-area > .ui-infobar {
display: block;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>
### 介紹
**Sorting(排序)** 可以讓資料以我們想要的呈現方式進行呈現。舉例來說,在購物網站中,我們可以對商品的「熱門程度」、「上架日期」、「價格」等條件來將商品依照特定方式排序。
Sorting可以分為兩類,分別是**Comparison Sort(基於比較的排序)** 和 **Non-comparision Sort(不基於比較排序)**。我們常使用的排序如**Bubble Sort**,**Insertion Sort**,**Quick Sort**等都是基於比較的排序,透過比較資料內容來決定資料的位置。
在N筆資料下,各個排序法的比較如表一:
| 排序法 | 時間複雜度 | 空間複雜度 | 穩定性 |
|:------------------- | ---------- | ---------- |:------ |
| [Bubble Sort][0] | O(N^2^) | O(1) | YES |
| [Insertion Sort][1] | O(N^2^) | O(1) | YES |
| [Selection Sort][2] | O(N^2^) | O(1) | NO |
| Merge Sort | O(NlogN) | O(N) | YES |
| Quick Sort | O(NlogN) | O(logN) | NO |
| Heap Sort | O(NlogN) | O(1) | NO |
[0]:https://hackmd.io/kzhWNN-ZQ9O3Ylatmvf9nw?view#Bubble-Sort
[1]:https://hackmd.io/2LOyrze-QTq79mL0RthJwg
[2]:https://hackmd.io/ynjSKvt1StuePhCXi9tZ8g?both
穩定性:需要排序的資料中,存在多筆相同值的數據,在完成排序後,其相對位置不變。
Ex:[2,1,2,3,5] -> [1,2,2,3,5],前面的2依舊在前面。
<hr style="height:1px;border:none;border-top:1px dashed #0066CC;">
[資料結構與演算法](/FP0Vd0lqQM2gDIadctxk2Q)