public static void advanceInsertSortWithBinarySearch(int[] arr) {

for (int i = 1; i < arr.length; i++) {

int temp = arr[i];

int low = 0, high = i - 1;

int mid = -1;

while (low <= high) {

mid = low + (high - low) / 2;

if (arr[mid] > temp) {

high = mid - 1;

} else { // 元素相同时,也插入在后面的位置

low = mid + 1;

}

}

for(int j = i - 1; j >= low; j--) {

arr[j + 1] = arr[j];

}

arr[low] = temp;

}

}