#include <stdio.h>
// 交换函数
void mySwap(int *a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
// 打印函数
void myPrint(int *a, int len)
{
int i;
for (i = 0; i < len; i++)
printf("%4d", a[i]);
printf("\n");
}
// 二分插入排序
void BinaryInsertSort(int *a, int len)
{
int i, j;
int get, left, right, mid;
for (i = 1; i < len; i++)
{
get = a[i];
left = 0;
right = i-1;
while (left <= right)
{
mid = (left+right) / 2; // 中间元素的下标
if (a[mid] > get)
right = mid-1;
else
left = mid+1;
}
// 移位
for (j = i-1; j >= left; j--)
a[j+1] = a[j];
a[left] = get;
}
}
int main()
{
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = sizeof arr / sizeof(int);
BinaryInsertSort(arr, len);
myPrint(arr, len);
return 0;
}