二分法插入排序,简称二分排序,是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left<right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
代码
private static void binarySort() {
int [] a={15,27,36,53,69,42};
for (int i = 0; i < a.length; i++) {
int temp = a[i]; // 待插入的元素
int left = 0;
int right = i - 1;
int mid = 0;
while (left <= right) {
// 先获取中间位置
mid = (left + right) / 2;
if (temp < a[mid]) {
// 如果值比中间值小,就要对折的前面部分再对折
right = mid - 1;
} else {
// 如果值比中间值大,就要对折的右面部分再对折
left = mid + 1;
}
}
for (int j = i - 1; j >= left; j--) {
a[j + 1] = a[j];
}
if (left != i) {
a[left] = temp;
}
}
}
时间复杂度:o(n^2)
由于用到了一个存储变量temp,所以空间复杂度:o(1)