排序算法(五)二分排序

二分排序是指折半插入排序。当直接插入排序进行到某一趟时,对于r[i].key来讲,前边i-1个记录已经按关键字有序。此时不用直接插入排序的方法,而改为二分折半查找,找出r[i].key应插入的位置,然后插入。

Java实现二分排序算法:

package com.review.sort;

public class BinarySort {

    public static void main(String[] args) {

        int[] a = { 4, 2, 1, 6, 3, 6, 0, -5, 1, 1 };
        int i, j;
        int low, high, mid;
        int temp;
        for (i = 1; i < a.length; i++) {
            temp = a[i];
            low = 0;
            high = i - 1;
            while (low <= high) {
                mid = (low + high) / 2;
                if (a[mid] > temp)
                    high = mid - 1;
                else
                    low = mid + 1;
            }
            for (j = i - 1; j > high; j--)
                a[j + 1] = a[j];
            a[high + 1] = temp;

        }

        for (i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

}

算法分析:
二分排序中,关键字的比较次数由于采用了折半查找而减少,数量级为O(n log n),但是元素移动次数仍为O(n^2)。故折半插入排序时间复杂度仍未O(n^2)。二分排序方法是稳定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值