C#实现插入排序(源代码)

算法思路:

将n个元素分成【已排序】和【未排序】两部分。每次将【未排序】中的一个元素取出,插入到已排序中的相应位置。直至所有元素排序完毕。

  【已排序】        【未排序】

  { { a[0] }               ,   { a[1],a[2],a[3]....a[n-1] } }

  { { a[0] , a[1] }   ,   { a[2],a[3] ....a[n-1] }   }

  { { a[0] ,a[1],a[2] } ,   { a[3]......a[n-1] }     }

性质:

插入排序是一种原地排序(只有常数个元素存到数组以外的空间),最坏的时间复杂度是n2

代码如下:

C#实现插入排序(源代码)
static void Main(string[] args)
        {
            var a= new int[]{5,3,1,9,4,32,2};
 
            
            for (int i = 1; i < a.Length; i++)    //外层循环:遍历数组,从第二个元素开始
            {
                int num= a[i];      //将待插入元素存入num
                int index = i;      //记录待插入元素下标


                for (int j = i-1; j >= 0; j--)   //内层循环:遍历待【插入元素之前】所有已经排好顺序的数组
                {
                    if( num < a[j])  // *如果待插入元素小于前一个元素,向后赋值一位*
                    {
                                a[index] = a[index -1];
                                index--;

                    }
                    else if (num >= a[j]) { break; } //找到插入位置,跳出内层循环

                }
                a[index] = num;    //插入到相应位置

            }

            foreach (var item in a)
            { Console.Write("\t" + item); }

            Console.Read();
        }
C#实现插入排序(源代码)

直观示意:

当原数组:{5,3,1,9,4,32,2}           前四位已经排好变成: {1,3,5,9,4,32,2} 的时候,该排4了, 数组的实际变化如下。

C#实现插入排序(源代码)

C#实现插入排序(源代码)

上一篇:nginx缓存设置


下一篇:拖拽文件作为文件输入