这篇博客介绍插入排序算法中的三种:
直接插入排序,折半插入排序,希尔排序
一.直接插入排序
1.1.算法思想
直接插入排序是一种最简单的排序算法,其它两种算法都是在直接插入排序算法的基础上的改进。
直接插入排序是将一个记录插入到一个已经排好序的有序表中,初始时,表中只有一个元素,也是有序的。
1.2.代码实现
实现一:
a[0]不作为哨兵
#include<stdio.h>
void InsertSort(int a[], int n)
{
int i, j, temp;
for(i = 1; i < n; i++)
{
if(a[i] < a[i - 1])
{
temp = a[i];
//j加入j >= 0 的条件是为了避免数组下标越界
for(j = i - 1; j >= 0 && a[j] > temp; --j)
{
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
}
main()
{
int a[] = {2,5,1,9,3,6,8};
int i;
int len = sizeof(a) / sizeof(int);
InsertSort(a, len);
for(i = 0; i < len; i++)
{
printf("%2d", a[i]);
}
}
实现二:
a[0]作为哨兵
#include<stdio.h>