插入排序之直接插入排序

1.  基本原理:

(1) 从数组第一个元素开始,该元素可默认是排好序的;

(2) 取下一个元素,在已经排好的序列中从后向前扫描;

(3) 若该元素(有序序列)大于新元素,将该元素移到下一位置;

(4) 重复(3),直到已排序的元素不大于新元素位置,将新元素插入到该元素的下一位置

(5) 重复(2)、(3)、(4)步骤

2.  直接插入排序复杂度:

空间复杂度为O(1)

最好时间复杂度为O(n)

最坏时间复杂度为O(n²)

平均时间复杂度为O(n²)

3.  直接插入排序图表演示:

 4.  总结:

(1) 适用于有部分数据已经有序,有序部分越大越有利;

(2) 输入数据规模大于1000的,不建议使用插入排序;

(3) 插入排序是一种稳定的算法。

5.  C#代码实现:

  class Program
    {
        static void Main(string[] args)
        {
            // 待排序数组
            int[] sortArray = { 2, 8, 3, 5, 7, 1, 4, 6, 9 };
            // 直接插入排序
            InsertSort(sortArray);
        }
        /// <summary>
        /// 直接插入排序
        /// </summary>
        /// <param name="sortArray">待排序数组</param>
        private static void InsertSort(int[] sortArray)
        {
            for (int i = 1; i < sortArray.Length; i++)
            {
                for (int j = i; j > 0; j--)
                {
                    if (sortArray[j] < sortArray[j - 1])
                    {
                        int temp = sortArray[j];
                        sortArray[j] = sortArray[j - 1];
                        sortArray[j - 1] = temp;
                    }
                }
                ShowSortResult(sortArray);
            }
        }
        /// <summary>
        /// 排序结果展示
        /// </summary>
        /// <param name="bubbleArray">排序数组</param>
        private static void ShowSortResult(int[] sortArray)
        {
            for (int k = 0; k < sortArray.Length; k++)
            {
                Console.Write(sortArray[k] + "  ");
            }
            Console.WriteLine();
        }
    }

  6.  运行结果:

 

posted @ 2020-04-04 22:15  南溪风  阅读(207)  评论(0)    收藏  举报