package com.insert; import java.util.Arrays; /** * 二分插入排序 * * @author wanjn * */ public class BinInsertSort { public static void main(String[] args) { int[] a = { 9,2,4,1,57,2,46,0 }; System.out.println(Arrays.toString(binnsertSort(a))); } private static int[] binnsertSort(int[] a) { //和直接插入排序一样,a[0]默认为有序,从下标1开始插入 int temp,left,right,mid; for (int i = 1; i < a.length; i++) { //先将a[i]位置空出来 temp = a[i]; left = 0; right = i-1; //二分查找失败的条件为左边大于右边 while (left<=right) { mid = (left+right)/2; if (temp <a[mid]) { right = mid-1; }else { left = mid+1; } } //目标值要插入的下标就是查找失败时left的值,同时需要将left到i-1的数据段向右移动一位 //注意移动的时候需要从高下标位置先挪动,不然会覆盖数据 for (int j = i-1; j >=left; j--) { a[j+1] = a[j]; } a[left] = temp; } return a; } }