插入排序算法
插入排序
618买了本算法导论,考完试10号,旅游完回来15号,又出去聚会了两天,终于开始学习了= =
第一个算法就是这个插入排序,道理很简单,后一个数和前一个数比较大小,交换顺序,最终按大小排好顺序。下面放一张原理图:
上图中还给出了伪代码,然后我稍作修改,用c写出了这个程序:
#include<stdio.h>
void InsertionSort(int []);
int main()
{
int a[5], i;
for(i = 0; i < 5; i++)
{
scanf("%d", &a[i]);
}
InsertionSort(a);
for(i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void InsertionSort(int num[])
{
int j, k, key;
for(j = 1; j < 5; j++)
{
key = num[j];
k = j - 1;
while(k >= 0 && num[k] > key)
{
num[k + 1] = num[k];
k = k - 1;
}
num[k + 1] = key;
}
}
测试结果如下:
在代码的第26行,把 num[k] > key 改成 num[k] < key 就能实现降序排序。
再说一下循环不变式,它的三个性质:初始化、保持、终止,可以帮助判断算法的正确与否。
保持这一性质是判断算法是否正确很关键一点,要保证每次迭代时 A[j] 之前的数已经排好序。
这个插入排序还是挺简单的,容易理解而且代码量少,后面就要学分析算法,看的一脸懵逼。这本书估计大四都学不完了orz
争取3天更一次博