十大排序算法之插入排序(C语言程序)
在排序算法中,插入排序算是比较直观易懂的算法,可以想象成玩扑克牌时把手里的牌一张张进行排序(抽出一张牌,然后插入到适合的位置)。
平均时间复杂度:O(n2)
最好情况:O(n)
最坏情况:O(n2)
空间复杂度:O(1)
排序方式:in-place
稳定性:不稳定
算法过程:
- 从第一个元素开始,把第一个元素当做有序序列;
- 下一个元素取出作为插入值,并与前一个元素相比较,若插入值小于前一个元素,则将前一个元素后移一位;
- 将插入值继续与前面的元素进行逐一比较,方法和步骤2相同,直到插入值大于或者等于当前比较的元素,将插入值插入当前元素的后面;
- 重复步骤2、3
完整C语言插入排序程序如下:
#include <stdio.h>
#include <stdlib.h>
//插入排序算法函数
void insert_sort(int *arr, int len)
{
int i=0,j=0,temp;
for(i=1;i<len;i++)
{
temp=arr[i];
for(j=i-1;j>=0;j--)
{
if(arr[j]>temp)
arr[j+1]=arr[j];
else
break;
}
arr[j+1]=temp;
}
}
int main()
{
int arr[15]={78,45,78,595,12,5,2,7,9,12,77,56,48,32,65}, n=15, i;
insert_sort(arr,15);
for(i=0;i<n;i++)
printf("%d ",arr[i]);
return 0;
}
如有疑问欢迎提出!