• 插入排序


    import java.util.Arrays;
    
    public class Test {
        public static void main(String[] args) {
            int[]a={100,5,8,9,2,12,3,89,0,65,5,8,12,1};
             a = insetSort(a);
            System.out.println(Arrays.toString(a));
    
        }
    
        /**
         * 插入排序法:将数组中其中一个数字拿出来,然后跟下一位进行比较,如果比其小就交换位置,接着继续跟下下位比较,一直找到比它大的位数为止,好比扑克牌整理牌那样,取出一个牌通过比较插到对应位置:
         * 数组:[0,10,6,1,2]
         * 第一轮:取出0,因为没有前一位,所以不用比,所以第一轮从10开始,10跟0比.比它大,所以不用交换,第一轮完成后,结果为[0,10,6,1,2]
         * 第二轮:取出6,然后6跟10比,比它小,交换位置,6继续跟下位0比,比它大,第二轮结束后[0,6,10,1,2]
         * 第三轮:取出1,1跟10比,交换位置,1继续跟6比,交换位置,1最后跟0比,比它大,不用交换,第三轮结束后[0,1,6,10,2]
         * 第四轮:取出2,2跟10比,交换位置,2跟6比交换位置,2跟1笔,不用交换[0,1,2,6,10],此时比较完毕,也排序完了
         * 总结:数组从索引为1起的数都要拿出来,然后跟前面的数据比,直到遇到比它大的为止
         * @param arr
         * @return
         */
    
        public static  int[] insetSort(int arr[])
    
        {
            if(null==arr || arr.length==0){
                return arr;
            }
            for (int i = 1; i < arr.length; i++) {
                //需要取出来插到其他位置的数字
                int insertNumber=arr[i];
                //下一位的索引
                int index=i-1;
                while (index>=0 && insertNumber<arr[index]){ //如果下一位的索引还没越界(小于0),则取出的数字跟下一位比较,如果小的话,下一位数字就往后移动一位
                    arr[index+1]=arr[index];//index上的数据往后移动一位,此时取出的数据(insertNumber)可以占用该位置了,因为还要跟下下位比较,所以此处先不写arr[index]=insertNumber
                    index--;//下标继续往下位移动
                }
                arr[index+1]=insertNumber;//当都比较完后,index就是insertNumber的位置了,因为循环里比较完后,index-1了,所以这里要加1,即时没有进入while循环,这里就index+1就是i了,相当于自己赋值给自己
    
            }
            return arr;
    
        }
    
    }
  • 相关阅读:
    转 将python的datetime转换为unix时间戳
    VMware 虚拟机中添加新硬盘的方法
    UBUNTU 安装 nodejs
    ubuntu 20 查看site-package 目录
    基于C++代码的UE4学习(四)—— 定时器
    ObjectMapper 动态用法
    关于Mybatis中Mapper是使用XML还是注解的一些思考
    Spring Boot 中使用 Jedis 及 Lettuce的对比
    批量切换版本
    Build OpenJdk
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10898282.html
Copyright © 2020-2023  润新知