其思路在:假设在a[i]之前的数组元素都是已经是有序排列的,那么我们所需要实现的是,在有序数组中,找到两个相邻的元素,使a [i]大小在他们之间,然后插入即可。具体的实现代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{ int i = 1;
int n = 20;
int j = 0;
int a[20]={45,98,4,65,87,6,44,66,78,52,65,22,55,55,25,78,52,56,23,12};
int tail,head,mid;
int temp;
for(i = 1 ; i < n ; i ++)
{
temp = a[i];
tail = 0;
head = i-1;
while(tail <= head )
{
mid = (tail + head )/2;
if(a[i] > a[mid])
{
tail = mid + 1;
}
else
{
head = mid - 1;
}
}
for(j = (i - 1); j >= head +1 ; j--)
{
a[j+1] = a [j];
}
a[head + 1] = temp;
}
return 0;
}