这个应该是 CLRS (算法导论)中介绍的第一个算法,其思想如下:
每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置,图片演示如上,时间复杂度 O(n^2),C 代码如下:
#include<stdio.h>
void insertion_sort(int arr[], int length)
{
int i,j,temp;
for( i=1; i<length; i++){
temp = arr[i];
for( j=i; j>0 && arr[j-1] > temp; j--)
{
arr[j] = arr[j-1];
}
arr[j] = temp;
}
}
int main()
{
int arr[] = {6,5,3,1,8,7,2,4};
int length = sizeof(arr) / sizeof(arr[0]) ;
insertion_sort( arr, length );
for( int i=0; i<length; i++)
printf("%2d",arr[i]);
return 0;
}