i=1:28, 40, 56, 15, 63, 74, 98, 80;i=2:不變;i=3:15, 28, 40, 56, 63, 74, 98, 80;i=4~6:不變;i=7:15, 28, 40, 56, 63, 74, 80, 98。
/* 在已排序的 arr[low..high] 中找出 val 的插入位置 */
int binarySearchPos(int arr[], int val, int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] <= val) low = mid + 1; /* <= 保證 stable */
else high = mid - 1;
}
return low;
}
void binaryInsertionSort(int arr[], int n) {
int i, j, pos, val;
for (i = 1; i < n; i++) {
val = arr[i];
pos = binarySearchPos(arr, val, 0, i - 1);
for (j = i - 1; j >= pos; j--)
arr[j + 1] = arr[j]; /* 大的往後搬 */
arr[pos] = val;
}
}