二分排序的代码实现

二分插入排序: 和插入排序类似,只不过通过对有序数组进行折半查找,以提高查找插入位置的效率。

    public int[] sort(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int left = 0;
            int mid = 0;
            int right = i -1;      //对第i个元素进行插入时,则有序数组的长度为i,最后的元素下标为i-1;
            int temp = a[i];       
            while (left <= right) {       //当left>right时代表位置查找结束。
                if (a[i] < a[mid]) {
                    right = mid - 1;
                    mid = (left + right) / 2;
                } else if (a[i] > a[mid]) {
                    left = mid + 1;
                    mid = (left + right) / 2;
                } else {
                    left = mid + 1;
                }
            }
            for (int j = i - 1; j > right; j--) {   //查找到的位置到第i个数之前的数全部向后挪一位。以便插入
                a[j+1] = a[j];
            }
            a[right+1] = temp;             //在查找到的位置处插入需要插入的元素值。
        }
        return a;
    }

 

posted @ 2017-08-08 15:27  halo-漾  阅读(308)  评论(0编辑  收藏  举报