// 二分插入排序 // 分类 -------------- 内部比较排序 // 数据结构 ---------- 数组 // 最差时间复杂度 ---- O(n^2) // 最优时间复杂度 ---- O(nlogn) // 平均时间复杂度 ---- O(n^2) // 所需辅助空间 ------ O(1) // 稳定性 ------------ 稳定 public void insertionSortDichotomySolution(int[] arr) { // 假设左边从0到i-1都已排好序 for (int i = 1; i < arr.length; i++) { int current = arr[i]; int left = 0; int right = i - 1; int mid = (left + right) >> 1; while (left <= right) { if (arr[mid] > current) { right = mid - 1; } else{ left = mid + 1; } mid = (left + right) >> 1; } for (int j = i - 1; j >= left; j--) { arr[j + 1] = arr[j]; } arr[left] = current; } }