原理:在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们 中间的那个元素比,如果小,则对前半再进行折半,否则对后半 进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间 的所有元素后移,再把第i个元素放在目标位置上。
代码如下:Java code
public static void binaryInsertSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
int start = 0;
int end = i - 1;
int temp = arr[i];
int mid;
while(start <= end)
{
mid = (start + end) / 2;
if(temp < arr[mid])
{
end = mid - 1;
}
else
{
start = mid + 1;
}
}
for(int j = i - 1; j > end; j--)
{
arr[j+1] = arr[j];
}
arr[end + 1] = temp;
}
}
说明:
1、mid = (start + end) / 2;必须在while循环内,在循环过程中会随着start、end的值的变化而变化。
2、目标位置是end + 1,将end + 1至i - 1之间的元素(包括两个位置)向后移动一位。