思想:
将数组的第一个数设置为关键字,通过一趟排序将待排记录分割成独立的两部分,其中,第一部分的关键字均比第二部分的关键字小,即第一部分小于等于关键字,第二部分大于关键字,分别对这两部分继续排序,直到整个序列有序。
图解如下:
代码如下:
#include<stdio.h>
print(int data[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",data[i]);
}
printf("\n");
}
void binInsertSort( int data[] ,int n )
{
/*----begin------*/
int i, j;
for( i = 1; i < n; i++ )
{
if( data[i] < data[i - 1] )
{
int temp = data[i];
int left = 0, right = i - 1;
while( left <= right )
{
int mid = ( left + right ) / 2;
if( data[mid] < temp )
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
for( j = i; j > left; j-- )
{
data[j] = data[j - 1];
}
data[left] = temp;
}
print(data,n);
}
/*-----end------*/
}
int main()
{
int data[]={1,6,2,8,3,4,9,5};
binInsertSort(data,8);
return 0;
}