最近在重新温习算法导论,书里面的算法一段时间不看就会忘记,于是我就想重新用C语言码出来,等以后自己再用复习或要用的时候,直接阅读代码,更加方便。
书上讲的第一个算法也是个人认为最简单的一个——插入排序,作者把插入排序比作打扑克牌时的摸排并排序,很形象,下面是插入排序的代码:
#include <stdio.h>
void insert_sort(int a[], unsigned int n)
{
unsigned int i, j;
int temp;
for (i = 1; i < n; i++)
{
temp = a[i];
j = i - 1;
while (j >= 0 && a[j] > temp)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
int main()
{
int array[] = {5, 10, 2, 3, 9, -1, 3};
int i;
insert_sort(array, sizeof(array) / sizeof(int));
for (i = 0; i < sizeof(array) / sizeof(int); i++)
{
printf("%d ", array[i]);
}
}
插入排序使用的是增量法,遍历数组a的第i项时,数组a的[0~i-1]项已经是有序的,在数组的前i-项中找到适合第i项的位置插入进去;i从头遍历到结尾,即实现了插入排序。