数据结构之插入排序

 插入排序

 如下图:如果此时要插入元素7,那么7比10小,10后移,然后7与5比,7比5大,所以7不用再移动位置

定义:

插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。适用于待排序记录较少并且基本有序的情况。

代码实现:

   class InsertSort
    {
        /// <summary>
        /// 升序
        /// </summary>
        /// <param name="arr"></param>
        public static void Sort(int[] arr)
        {
            int n = arr.Length;
            //i=1是因为插入排序是从后往前比。比如下面数组,一开始是要将5默认为一个有序数组,从4开始跟5比。
            //5 4 6 1 7 
            for (int i = 1; i < n; i++)
            {
                //插入元素e
                int e = arr[i];
                //j表示元素e应该插入的位置
                int j;
                for (j = i; j > 0; j--)
                { 
                    if (e < arr[j-1])
                    {
//因为插入的元素比有序数组中的某个值小,所以将有序数组中的这个值后移 arr[j]
= arr[j - 1]; } else { //此时说明不用再比较了 break; } } //通过for循环判断,最终找到了j具体的位置,将元素e放在此位置上 arr[j] = e; } } }

 

 

 

性能对比

插入排序和冒泡排序还有选择排序都是O(n*n)的时间复杂度,因为都是有2层for循环,但是插入排序要比选择排序要好,是因为插入排序存在break跳出循环的一个动作,只要符合条件了,就可以跳出循环。对于近乎有序的数组其性能更高。

 

posted @ 2021-09-04 11:09  安静点--  阅读(139)  评论(0编辑  收藏  举报