八大排序算法之直接插入排序
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
算法原理
将n个元素的数列分为已有序和无序两个部分,如下所示:
插入排序过程示例
{{a1},{a2,a3,a4,…,an}}
{{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}}
…
{{a1(n-1),a2(n-1) ,…},{an(n-1)}}
每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
算法分析
直接插入排序是一种稳定的排序,其时间复杂度为O(n`2)。
算法实现
C语言版本实现如下:
void Insert(int *a,int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
{
if(a[i]<a[j])
{
temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
测试代码如下:
int main()
{
int i;
int a[11]= {2,1,6,5,8,3,2,9,48,4,-13};
Insert(a,11);
for(i=0;i<11;i++)
printf("%d\t",a[i]);
return 0;
}
测试通过!