最近在看算法导论这本书,打算把书上介绍到的算法在博客上默写出来,以求加深记忆与理解,第一次用博客这种东西
第一个介绍的算法是插入排序。插入排序的思想和我们打牌时的过程差不多,握在手上的牌均为已经排好顺序的牌,当拿到下一张牌后,只需将这张牌与手上的牌逐一进行比较,即可找到这张牌应该所在的位置。算法的实现过程很简单,只需要两个嵌套循环即可。元素最多交换次数sum=1+2+3+.......+(n-1)=n(n-1)/2,时间复杂度为O(n^2)
// exercise.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
void insert_sort (int a[], int n)
{
int temp;
for (int i = 1; i < n; i++)
{
for (int j = i ; j > 0; j--)
{
if (a[j] < a[j - 1])
{
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
else
break;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {9,8,7,6,5,4,3,2,1};
printf("Before sorted:\n");
for (int i = 0; i < 9; i++)
{
printf("%d ", a[i]);
}
insert_sort(a,9);
printf("\nAfter sorted:\n");
for (int i = 0; i < 9; i++)
{
printf("%d ",a[i]);
}
return 0;
}