二分插入排序
Posted WhaleFall541
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分插入排序相关的知识,希望对你有一定的参考价值。
代码来自改视频改写
去掉了0号位的哨兵
/**
* @Author: WhaleFall541
* @Date: 2021/6/9 22:05
*/
public class BinaryInsertion {
public static void main(String[] args) {
int[] arr = {-1, 20, -3, -10, 100, -255};
int[] ints = binaryInsertion(arr);
StringBuilder sb = new StringBuilder();
for (int i : ints)
sb.append(i).append(" ");
System.out.println("sb = " + sb);
}
public static int[] binaryInsertion(int[] arr) {
int n = arr.length;
// 3 -1 2
for (int i = 1; i < n; i++) {
int x = arr[i];// 表示要排序的数值
int left = 0, right = i - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (x > arr[mid])
left = mid + 1;
else
right = mid - 1;
}
// 将从 right+1 到 i-1位置的元素后移一位
for (int j = i - 1; j >= right + 1; j--)
arr[j + 1] = arr[j];
// 退出循环是high+1就是x要插入的位置
arr[right + 1] = x;
}
return arr;
}
}
参考资料
以上是关于二分插入排序的主要内容,如果未能解决你的问题,请参考以下文章