• 插入排序


     (一)什么是插入排序

      插入排序,是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中,从后向前扫描,找到相应的位置并插入。

      如果已经了解了插入排序,那么可以直接进入到总结篇:https://www.cnblogs.com/gdouzz/p/10759399.html

     (二)代码实现

    1、从第一个元素开始,该元素可以认为已经被排序
    2、取出下一个元素,在已经排序的元素序列中从后向前扫描
    3、如果该元素(已排序)大于新元素,将该元素移到下一位置 4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5、将新元素插入到该位置后 6、重复步骤2
    ~5
            static int[] InsertionSort(int[] arr)
            {
                for (var i = 0; i < arr.Length; i++)
                {
                    var tempValue = arr[i];
                    var k = i - 1;
                    for (; k >= 0; k--)
                    {
                        if (tempValue < arr[k])
                        {
                            arr[k + 1] = arr[k];
                        }
                        else
                        {
                            break;
                        }
                    }
                    arr[k + 1] = tempValue;
                }
                return arr;
            }

     (三)时间复杂度分析

    //插入排序     
        //接下来就是 插入排序 
        //插入排序的过程 比如最坏的情况下
        //5,4,3,2,1
        //插入排序,最坏时间复杂度,5,4,3,2,1
        // 插入排序的概念:从未排序的区间里面,选拿一个到已排序的区间里面(可能要进行,元素的比较和移动)。
        //插入排序是一种原地排序的算法。
        //插入排序,分为两个已排序区间和未排序区间
        //插入排序最坏时间复杂度 
        //第一趟:5,4,3,2,1  取出一个4出来,4和5比较一下,比5小,4插入到5的前面。 比较了一次,移动了一次。
        //第二趟:4,5,3,2,1  取出一个3来,3和5比较一下,3比5小,移动一次,3和4比较一次,移动一次,
        //第三趟:3,4,5,2,1  取出一个2来,2和5比较一下,移动一次,2和4比较一次,移动一次,2和3比较一下,移动一次。 
        //第四趟:2,3,4,5,1  取出一个1来,1和5比较一下,移动一次,1和4比较一次,移动一次,1和3比较一次,移动一次,1和2比较一次,移动一次。
        //从这个可以看出。比较次数1+2+3+4  交换次数1+2+3+4  都是o(n²),所以最坏情况下是o(n²);
        //最好情况下,1,2,3,4,5。
        //第一趟,取出一个2来,2和1比较一下,2插入到1后面,移动零次
        //第二趟,取出一个3来,3和2比较,3插入到后面,移动零次
        //第三趟,取出一个4来,4和3比较,4插入到后面,移动零次
        //第四趟,取出一个5来,5和4比较,5插入到后面,移动零次
        //那比较次数是o(n),移动次数0。
  • 相关阅读:
    BZOJ 3262 cdq分治 OR 树套树
    Weekly Contest 132
    1007. Minimum Domino Rotations For Equal Row
    1002. Find Common Characters
    974. Subarray Sums Divisible by K
    926. Flip String to Monotone Increasing
    918. Maximum Sum Circular Subarray
    914. X of a Kind in a Deck of Cards
    907. Sum of Subarray Minimums
    900. RLE Iterator
  • 原文地址:https://www.cnblogs.com/gdouzz/p/10759390.html
Copyright © 2020-2023  润新知