插入排序(Insertion Sort)
1. 名称
插入排序法,英文名称 INSERTION SORT。
2. 思想
插入排序的思想是:所有待排序的元素组成的一个数组为 A [ 1.. n ] A[1..n] A[1..n](此时 A [ 1.. n ] A[1..n] A[1..n]中元素是无序的),假设其中前一部分的元素已经排好序,排好序的部分是 A [ 1.. i ] A[1..i] A[1..i],现在需要将 A [ i + 1.. n ] A[i+1..n] A[i+1..n]部分的元素 依次(逐个) 放到已经排好序的部分中,最后组成的数组仍然是 A [ 1.. n ] A[1..n] A[1..n](此时 A [ 1.. n ] A[1..n] A[1..n]中元素是有序的)。这个过程就是插入排序。
3. 算法伪代码
插入排序(INSERTION SORT)
输入:
n
n
n 个数的一个序列
<
a
1
,
a
2
,
.
.
.
,
a
n
>
<a_1, a_2, ..., a_n>
<a1,a2,...,an>。
输出:输入序列的一个排序
<
a
1
′
,
a
2
′
,
.
.
.
,
a
n
′
>
<a_1', a_2', ..., a_n'>
<a1′,a2′,...,an′>,满足
a
1
′
≤
a
2
′
≤
.
.
.
≤
a
n
′
a_1' \leq a_2' \leq ... \leq a_n'
a1′≤a2′≤...≤an′。
INSERTSORT(A):
for j = 2 to A.length
// 待排序的数组元素
key = A[j]
// 将 A[j] 插入到有序序列 A[1..j-1] 中
i = j-1
// 查找元素 key 应该放入的位置
// 将大于 key 的元素统一向后移动一个位置
while i > 0 and A[i] > key
A[i+1] = A[i]
i = i-1
// 将元素 key 放入正确位置,实现有序插入
A[i+1] = key
4. 代码实现
Java 源代码如下所示:
public static void insertSort(int[] array)
{
if (array == null || array.length <= 1)
{
return;
}
for (int i = 1; i < array.length; ++i)
{
int key = array[i];
int j = i - 1;
while (j >= 0 && array[j] > key)
{
array[j + 1] = array[j];
--j;
}
array[j + 1] = key;
}
}