插入算法排序

 public static void insertion(int []arr){
        // 判断数组是否为空  或者长度小于2 以上条件没有排序的意义
        if (arr == null || arr.length < 2){
            return;
        }

        /*
          插入排序原理是 :
          第一轮保证前两个有序 第一轮索引位置 0 : 1相比较 如果 0 < 1 就把0与1的位置互换
          第二轮保证前三个有序 第二轮索引位置 1 : 2相比较 如果 1 < 2 就把1与2的位置互换 再与0的位置比较如果0 > 2就换
          第n轮 n - 1 : n -2 如果 n - 1 < n -2就向左边进行换位 直到左边没有数了 或者左边的数要大
         */
        // i 从 1开始 arr.length -1结束
        for (int i = 1; i < arr.length ; i++){
            // j = i - 1 也就是i前面一位数 然后相比较必须满足 arr[j] < arr[j + 1] 且j >= o才执行换位
            // int [] arr = {5,4,2,1,3};
            // 第一轮: 4,5,2,1,3  i = 1  j = 0 因为j > i  所以j与i的位置互换 再次循环 发现j--已经小于0终止循环
            // 第二轮: 第一次 4,2,5,1,3 因为j > i j与i的位置互换 再次循环j--等于0 继续循环
                     //第二次 2,4,5,1,3 因为j > i j与i的位置互换 发现j--已经小于0终止循环
            // 第n轮:n - 1 : n - 2 如果 n - 1 < n -2就向左边进行换位 直到循环 j < 0或者比左边的数大 终止循环

            for (int j = i - 1; arr[j]  > arr[j + 1] && j >= 0; j--){
                // 调用换位的方法
               transposition(arr,j,j+1);
            }
        }
    }
    // 换位方法
    public static void transposition(int [] arr ,int j,int i){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    // 打印方法
    public static void print(int [] arr ){
        for (int i = 0; i < arr.length; i++){
            System.out.print(arr[i]+ " ");
        }
    }
    public static void main(String[] args) {
        // 创建一条无序的数组
        int [] arr = {5,4,2,1,3};
        // 调用排序方法
        insertion(arr);
        // 调用打印方法 打印排序后的数组
        print(arr);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值