插入排序算法讲解

Posted zhijm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序算法讲解相关的知识,希望对你有一定的参考价值。

  一,插入排序的思路

 插入排序的思路
①把数据分成两部分,一部分是有序的,一部分是无序的 即[5] [2,3,9,6]
②然后从无序部分依次拿出一个元素,把这个元素存储在一个变量值中,和有序的最后一个元素进行比较,如果比有序部分的数据还大,
那就暂时把这个大的值,赋值给无序部分要插入的那个数
则和有序部分的倒数第二个进行比较(当然如果有序部分只有一个元素,那就值比较一次),直到找到一个比自己小的数然后在其后面进行插入
③如果和有序部分的数据比较完都没有符合的就在有序部分的最后进行插入
④这时有序的元素就多了一个,无序就少了一个
二,示例
 示例
5,2,3,9,6
①[5],[2,3,9,6]
②[2,5][3,9,6]
③[2,3,5] [9,6]
④[2,3,5,6][9]-->2,3,5,6,9
通过示例发现n个数 通过n-1次就可以排序完成
三,代码
public static void insertSort(int []arr){
        /**
         * 5,2,3,9,6
         * 插入排序的思路
         * ①把数据分成两部分,一部分是有序的,一部分是无序的 即[5] [2,3,9,6]
         * ②然后从无序部分依次拿出一个元素,把这个元素存储在一个变量值中,和有序的最后一个元素进行比较,如果比有序部分的数据还大,
         * 那就暂时把这个大的值,赋值给无序部分要插入的那个数
         * 则和有序部分的倒数第二个进行比较(当然如果有序部分只有一个元素,那就值比较一次),直到找到一个比自己小的数然后在其后面进行插入
         * ③如果和有序部分的数据比较完都没有符合的就在有序部分的最后进行插入
         * ④这时有序的元素就多了一个,无序就少了一个
         * 示例
         * 5,2,3,9,6
         * ①[5],[2,3,9,6]
         * ②[2,5][3,9,6]
         * ③[2,3,5] [9,6]
         * ④[2,3,5,6][9]-->2,3,5,6,9
         * 通过示例发现n个数 通过n-1次就可以排序完成
         */

        int middleNumber=0;
        int middleIndex=0;
        for(int i=1;i<arr.length;i++){
            middleNumber=arr[i];
            middleIndex=i-1;
            while(middleIndex>=0 &&middleNumber<arr[middleIndex]){
                arr[i]=arr[middleIndex];
                middleIndex--;
            }

             if(middleIndex + 1!=i) {
                 arr[middleIndex + 1] = middleNumber;
             }


        }
    }

 

 
 

以上是关于插入排序算法讲解的主要内容,如果未能解决你的问题,请参考以下文章

Scratch算法讲解Scratch插入排序 少儿编程Scratch常见排序算法案例分析讲解三

8大排序算法图文讲解

数据结构与算法 通俗易懂讲解 直接插入排序

插入排序算法讲解

插入排序算法讲解

算法讲解Scartch经典算法4之--希尔排序算法