时间复杂度:O(n^2)
定义:假定第一个元素有序,然后将后面的元素按照顺序依次插入前面的序列,使数列依然有序。
函数一:
#include <stdio.h>
int insert(int* a, int len)
{
int i = 0, j = 0, tmp = 0;
for(i=0; i<len-1; i++) {
j = i;
tmp = a[i+1];
while(tmp < a[j] && j>=0 ){
a[j+1] = a[j];
j--;
}
a[j+1] = tmp;
}
}
int main()
{
int a[9] = {12, 9, 0, 3, -12, 11, 7, 11, 1};
insert(a, 9);
int i = 0;
for(i=0; i<9; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
函数二:
#include<stdio.h>
void insert(int* a, int n)
{
int i,j,tmp;
for(i=1;i<n;i++){
tmp = a[i];
j=i-1;
while(j>=0 && tmp<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}
int main()
{
int i=0;
int a[9]={12,38,56,0,21,7,9,16,99};
insert(a,9);
for(i=0;i<9;i++){
printf("%d ",a[i]);
}
return 0;
}