1. 内部排序
1.1. 插入排序
1.1.1. 直接插入排序(Straight Insertion Sort)
1.1.2. 折半插入排序(Binary Insertion Sort)
1.1.3. 希尔排序(Shell 's Sort)
1.2. 交换排序
1.2.1. 冒泡排序(Bubble Sort)
1.2.2. 快速排序(Quick Sort)
1.3. 选择排序(Selection Sort)
1.3.1. 简单选择排序(Simple Selection Sort)
1.3.2. 堆排序(Heap Sort)
堆的定义:
若存在 n n n 个元素的序列 { k 1 , k 2 , … , k n } \{ k_1,k_2,\dots,k_n\} {k1,k2,…,kn},其中
{
k
i
⩽
k
2
i
k
i
⩽
k
2
i
+
1
\begin{cases} k_i \leqslant k_{2i} \\ \\ k_i \leqslant k_{2i+1} \end{cases}
⎩
⎨
⎧ki⩽k2iki⩽k2i+1
1
◯
\text{\textcircled 1}
1◯ 或
{
k
i
⩾
k
2
i
k
i
⩾
k
2
i
+
1
\begin{cases} k_i \geqslant k_{2i} \\ \\ k_i \geqslant k_{2i+1} \end{cases}
⎩
⎨
⎧ki⩾k2iki⩾k2i+1
2
◯
\text{\textcircled 2}
2◯ ,
i
=
1
,
2
,
…
,
⌊
n
2
⌋
i=1,2,\dots, \lfloor \dfrac{n}{2} \rfloor
i=1,2,…,⌊2n⌋
则称为堆。
小根堆: 满足条件 1 ◯ \text{\textcircled 1} 1◯的堆称为小根堆。
大根堆: 满足条件 2 ◯ \text{\textcircled 2} 2◯的堆称为大根堆。