void twoInsertSort(int array[],int n)
{
int left,right,num;
int middle,j,i;
for(i = 1;i < n;i++)
{
left = 0;
right = i-1;
num = array[i];
while( right >= left)// 二分法查找插入位置
{
middle = ( left + right ) / 2;
if( num < array[middle] ) right = middle-1;
else left = middle+1;
}
//每次查找完毕后,left总比right大一,a[left]总是存放第一个比num大的数,因此应从此处开始,
//每个元素右移一位,并将num存入a[left]中,这样就保证了a[0...i]是排好序的
for( j = i-1;j >= left;j-- )
array[j+1] = array[j];
array[left] = num;
}
}
插入排序法的一种修改,当a[0],a[1]...a[i-1]排好序,寻找第i个元素在其中的位置时采用二分查找法,于是该算法称二分排序法
二分插入排序
最新推荐文章于 2023-03-06 15:54:28 发布