• 排序算法之--插入排序


    基本思想:

    看图 ,觉得网上这张图特别形象。就是从牌堆里抓牌,比如先抓个3,在抓个7,在抓个9,在抓个4,把4插到3和7中间,这个时候3不动,后面的牌诺位置空出来给4,

    其实挪动的话更像蜘蛛纸牌挪动,因为7不能先往后挪,不然会把后面的牌给覆盖。所以从后往前挪动,最后腾个位置插4。

    书面一点:

    把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

    上代码:

     public static void insertSort(int[] arr)
        {
            for(int i=1;i<arr.length;i++)//从第二个元素开始
            {
                int nowdata=arr[i];//记录要插入的数值
                int k=0;
                for( k=i-1;  k>=0 &&  arr[k]> nowdata   ;k-- )
                {
                    arr[k+1]=arr[k];
                }
                arr[k+1]=nowdata;//赋值
    
            }
        }
        public static void main(String[] args) {
            //int array[] = {4,2,1,5};
            int[] array=new int[100_000];
            for(int i=0;i<array.length;i++){//随机产生数据
                array[i]=(int)(Math.random()*1000+1);
            }
            long startTime = System.currentTimeMillis();    //获取开始时间
            insertSort(array);
            long endTime = System.currentTimeMillis();    //获取结束时间
    
            System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
    
        }

    看到了好几种写法,每种写法各有各的思路

    在放一种参考的

    public static void insertSort1(int[] nums)
        {
            int j;
            for(int i=1;i<nums.length;i++)
            {
                int temp = nums[i];
                for(j=i;j>0;j--)
                {
                    if(temp < nums[j-1])
                    {
                        nums[j] = nums[j-1]; //将所有在nums[i]之前的大于nums[i]的值都往后移一位
                    }
                    else break;
                }
                //移完所有大于nums[i]的值后,j刚好指向最靠前一个大于nums[i]的位置
                nums[j] = temp;
            }
            
        }

    总结:

    插入排序最多十万级的数据,最好的应用场景是边读边排,不适合数据量太大的,太大的还是用快排。

  • 相关阅读:
    Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)
    synchronized 与 lock锁的异同
    SpringMVC工作流程
    close()和flush()的区别
    MySQL—索引(Index)
    MySQL—事务(ACID)
    MySQL—存储引擎
    周学习笔记(16)——大三下
    周学习笔记(15)——大三下
    周学习笔记(14)——大三下
  • 原文地址:https://www.cnblogs.com/symkmk123/p/9453755.html
Copyright © 2020-2023  润新知