由于插入排序的特点是顺序排序,所以在大数据量的时候可以使用二分查找来优化排序效率。
#include "stdafx.h"
#include "stdio.h"
int GetIndex(int* pData, int low, int high, int value)
{
int mid = 0;
while( low <= high )
{
mid = (low + high) / 2;
if( *(pData+mid) < value && *(pData+mid+1) >= value )
break;
else if( *(pData+mid+1) < value )
low = mid + 1;
else if( *(pData+mid) >= value )
high = mid - 1;
}
return mid+1;
}
int main(int argc, char* argv[])
{
int A[] = {23, 12, 45, 78, 98, 8, 63, 20, 81};
int count = sizeof(A) / sizeof(A[0]);
for( int i = 1; i < count; i++ )
{
int temp = A[i];
int index = GetIndex(A, 0, i-1, A[i]);
for( int j = i; j >= index; j-- )
{
if( A[j-1] > temp )
A[j] = A[j-1];
else
break;
}
A[j] = temp;
}
for( i = 0; i < count; i++ )
printf("%d ", A[i]);
return 0;
}