美文网首页
java算法:折半插入排序

java算法:折半插入排序

作者: Bfmall | 来源:发表于2023-03-22 17:00 被阅读0次

    从无序序列中取出一个一个元素放入到一个有序序列中
    把无序序列的第一个元素作为一个有序的序列,取下一个元素a,在有序序列中根据二分法,取出中间的元素b,a与b进行比较,若a大于b,则b在有序序列的后半部分,若a小于b,则在有序序列的前半部分,这样循环的的进行位置的确定,再把元素的插入到有序序列中正确的位置。

    时间复杂度最好的情况为O(nlog2n),最坏的情况为O(n^2)

    /**
         * 折半插入排序
         */
        public void insertSort03() {
            int[] arr = {3,2,6,1,7,5,9,8};
            for (int i = 1; i < arr.length; i++) {
                int insertValue = arr[i];//保存要插入的数的数值
                int low = 0;//设置查找区间初始值 下区间值
                int high = i - 1;//上区间值
                while (low <= high) {//查找结束条件
                    int mid = (low + high) / 2;//折半,中间值
                    if (arr[mid] > insertValue) {
                        //待插入值小于中间值
                        high = mid - 1;//上区间值变为中间值-1
                    } else {
                        //待插入值大于中间值
                        low = mid + 1;//下区间值变为中间值+1
                    }
                }
              
                for (int j= i-1; j >= low; j--){
                    arr[j+1]=arr[j];//将low及low之前的数向前移动一位
                }
                arr[low]=insertValue;//low就是待插入值的适当插入点
            }
    
            Log.i(TAG, "折半插入排序结果:"+ Arrays.toString(arr));
        }
    

    折半插入排序结果:[1, 2, 3, 5, 6, 7, 8, 9]

    参考:
    https://blog.csdn.net/m0_37123168/article/details/121383070
    https://blog.csdn.net/qq_57610796/article/details/122789713

    相关文章

      网友评论

          本文标题:java算法:折半插入排序

          本文链接:https://www.haomeiwen.com/subject/mpxbrdtx.html