插入排序

 

数据结构 数组
最差时间复杂度 O(n^2)
最优时间复杂度 O (n^2)
平均时间复杂度 O(n^2)
空间复杂度 O(1)
排序方式 in-place
稳定性 稳定
比较次数 n*(n-1)/2
适用场景 初始序列大量有序

 

 

 

 

 

 

 

 

 

 

 步骤: 

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。
(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)


图片出处:https://www.cnblogs.com/chengxiao/p/6103002.html

    /// <summary>
    /// 插入排序
    /// </summary>
    public class InsertSort : SortBase, ISort
    {
        public void Sort()
        {
            int j;

            // //  前i个元素是已排序的
            for (int i = 1; i < arr.Length; i++)
            {
                int temp = arr[i];// 暂存第i个元素

                // 第i个元素和依次和之前的元素比较
                for (j = i; j > 0 && temp < arr[j - 1]; j--)
                {
                    arr[j] = arr[j - 1];
                }

                if (j != i)
                {
                    arr[j] = temp;
                }
                base.output(arr);
            }

        }

        //反着写一下
        public void Sort2()
        {
            int j;
            for (int i = arr2.Length - 2; i >= 0; i--)
            {
                int temp = arr2[i];

                for (j = i; j < arr2.Length - 1 && temp > arr2[j + 1]; j++)
                {
                    arr2[j] = arr2[j + 1];
                }

                if (i != j)
                {
                    arr2[j] = temp;
                }

                base.output(arr2);
            }
        }


    }

 结果:

posted @ 2019-01-09 16:21  luanxm  阅读(208)  评论(0编辑  收藏  举报