原理
这个是直接插入排序的改进,首先假设 i 前面的数据已经是有序的了。然后取其中间的数与 a[i]比较,大于a[i]取前半段,否则取后半段,直到找到适合的插入点。
代码
int left=0, right = 0,mid;
long k;
for (int i = 1; i < a.Length; i++)
{
k = a[i];
left = 0;
right = i - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (a[mid] > k)
{
right--;
}
else
{
left++;
}
}
for (int j = i - 1; j > right; j--)
{
a[j + 1] = a[j];
}
a[right + 1] = k;
}
}