其实是主要在二分查找算法的基础上执行插入操作
接下来我结合算法的实际例子来解释
初始数组 10 21 7 13 14 3 12 ,对其进行由小到大进行排序
/先解释一下2分法,比如在一个有序数组{1,2,3,3,6,9,11}中,我要查找数字2在其中的位子,首先先比较2与数组中间数字3的大小,发现2小于3,则2肯定在数字3的左边数组{1.2.3},比较2与{1.2.3}的中间数2,发现相等,输出该个位置即可。/
第一步,看数组第一个数10,利用2分法找到10在集合{}的插入位置,进行插入操作后集合变成{10},/注意,这一步可做可不做。/接下来利用2分法找到下一个数21在集合{10}的插入位置,进行插入操作后集合变成{10,21},接下来利用2分法找到下一个数7在集合{10,21}的插入位置,进行插入操作后集合变成{7,10,21}…….按照此规则直到所有结点插入完成后即可结束,最后排序为{3,7,10,12,13,14,21}.
void twoins(int a[],int n)
{
int i,d,term;
for(i=1;i<n;i++)
{
term=a[i];
d=search(a,0,i-1,term);
pai(a,i,d,term);
}
}
int search(int a[],int low,int high,int th)
{
if(low<=high)
{
int mid=(low+high)/2;
if(term>=a[mid])
return search(a,mid+1,high,term);
if(term<a[mid])
return search(a,low,mid-1,term);
}
return low;
}
void pai(int a[],int n,int d,int th)
{
int i;
for(i=n;i>d,i--)
{
a[i]=a[i-1];
}
a[i]=th;
}