java 二分插入排序算法

 二分插入排序实现原理:
假定从小到大排序,从第二个数开始,把当前的数用一个变量temp保存起来作为要插入的数,然后根据二分查找原则在要插入的数前面找到需要插入的地方,然后较大的数依次往后移,将temp放在插入的地方。然后从第三个数开始如此往返循环将所有的数插入进去。
时间复杂度 O(nlogn)
 

public class BinaryInsertSort {
    public static void main(String[] args) {
        int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }

        //二分插入排序
        sort(a);
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

    //二分法插入
    private static void sort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            int temp = a[i];
            int left = 0;
            int right = i-1;
            //确定要插入的位置
            while(left<=right){
                //先获取中间位置
                int mid = (left+right)/2;
                if(temp<a[mid]){
                    //如果值比中间值小,让right左移到中间下标-1
                    right = mid-1;
                }else{
                    //如果值比中间值大,让left右移到中间下标+1
                    left = mid+1;
                }
            }
            for (int j = i-1; j >= left; j--) {
                //以左下标为标准,在左位置前插入该数据,左及左后边全部后移
                a[j+1] = a[j];
            }
            if(left != i){
                //左位置插入该数据
                a[left] = temp;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u010695063/article/details/86470306
今日推荐