(直接)插入排序(Insert Sort)

 /**
     * 3.1 直接插入排序: 每步将一个待排序的记录,按其顺序码大小插入到前面已经
     * 排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止
     * 
     * EX: int[] nums={8,1,4,2,23,10}; <
     * 
     *                 8,1,4,2,23,10
     *                   |
     *                 1,8,4,2,23,10
     *                     |
     *                 1,4,8,2,23,10
     *                       |
     *                 1,2,4,8,23,10
     *                         |
     *                 1,2,4,8,23,10
     *                            |
     *                 1,2,4,8,10,23
     * 
     * 直接插入排序是稳定的排序.
     * 文件初态不同时,直接插入排序所耗费的时间有很大差异.
     * 若文件初态为正序,则每个待插入的记录只需要比较一次就能够找到合适的位置插入,
     * 故算法的时间复杂度为O(n),这时最好的情况.若初态为反序,则第i个待插入记录
     * 需要比较i+1次才能找到合适位置插入,故时间复杂度为O(n2),这时最坏的情.
     * 直接插入排序的平均时间复杂度为O(n2).
     * 
     */
     */

    public static void insertSort(int[] nums) {
        int insert;
        for(int i=1;i<nums.length;i++){
            if(nums[i]<nums[i-1]){
                insert=nums[i];
                for(int j=i-1;j>=0;j--){
                    nums[j+1]=nums[j];
                    if(j==0){
                        nums[j]=insert;
                    }
                    else if(insert>=nums[j-1]){
                        nums[j]=insert;
                        break;
                    }
                }
            }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值