Java排序算法——二分插入排序

二分插入排序
基本原理:对于直接插入排序的一种改进,通过不断地折半来快速确定第i个元素的插入位置。即计算0~i-1的中间点,用i索引处的元素与中间值进行比较,如果i索引处的元素大,说明要插入的这个元素应该在中间值右侧,反之在左侧(从小到大)
时间效率: O(n2)
空间效率: O(1)
算法稳定性:不稳定

//二分插入排序(从小到大排序)
public class Sort_Binary {
    private void binarySort(int nums[]){
        int length = nums.length;

        int minIndex =0;
        for(int i = 1;i<length;i++){//从第二个元素开始
            int left=0;//左指针
            int right=i-1;//右指针
            int temp = nums[i];//存储该次循环要插入的元素
            //判断插入的位置索引
            while(left<=right){
                minIndex = (left+right)/2;
                if(nums[minIndex]<nums[i]){
                    left = minIndex+1;
                }else{
                    right = minIndex-1;
                }
            }
            //移动插入位置索引后面的原数组元素
            for(int k =i;k>left;k--){
                nums[k] = nums[k-1];
            }
            //更新插入位置索引的元素
            nums[left] = temp;
        }
        System.out.println(java.util.Arrays.toString(nums));
    }
    //测试函数
    public static void main(String[] args) {
        int nums[]={89,54,78,8,398,7,560,25,963,16};
        Sort_Binary test = new Sort_Binary();
        test.binarySort(nums);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值