概述
一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中。
它的算法步骤可以大致归纳如下:
1. 从未排好的序列中拿出首元素,并把它赋值给temp变量;
2. 从排好的序列中,依次与temp进行比较,如果元素比temp大,则将元素后移(实际上放置temp的元素位置已经空出)
3. 直到找到一个元素比temp小, 将temp放入该位置;
时间复杂度:o(n^2)
核心代码实现:
void Insertion_Sort(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int temp=a[i];
for(j=i;j>0&&a[j-1]>temp;--j)
a[j]=a[j-1];
a[j]=temp;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
具体样例:
#include <stdio.h>
void Insertion_Sort(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int temp=a[i];
for(j=i;j>0&&a[j-1]>temp;--j)
a[j]=a[j-1];
a[j]=temp;
}
}
int main()
{
int a[]={1,3,63,5,78,9,12,52,8};
int n=sizeof(a)/sizeof(int),i;
Insertion_Sort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
运行结果: