zoukankan      html  css  js  c++  java
  • 二分插入排序

    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;
        }
    }
  • 相关阅读:
    python学习之路-day3
    python学习之路-day2
    python学习之路-day1
    Hystrix断路器
    jmater的使用
    记录1
    springcloud-Gateway
    Quartz框架
    红黑树的左旋和右旋
    异步回调CompletableFuture
  • 原文地址:https://www.cnblogs.com/wanjn/p/8569944.html
Copyright © 2011-2022 走看看