zoukankan      html  css  js  c++  java
  • 秒懂算法3——插入排序(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。且它是稳定的排序算法

    代码如下:

    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("	" + item); }
    
                Console.Read();
            }

    直观示意:

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

  • 相关阅读:
    数据结构 队列
    数据结构 堆栈
    UNP学习 广播
    UNP学习 路由套接口
    QTcpSocket发送结构体
    线性表及实现
    [转]理解WSRF之一 使用WS-ResourceProperties (整理自IBM网站)
    详解x86、IA-32、IA-64等CPU系列
    gsoap框架下的onvif程序流程分析
    【LeetCode】从contest-21开始。(一般是10个contest写一篇文章)
  • 原文地址:https://www.cnblogs.com/hydor/p/3523448.html
Copyright © 2011-2022 走看看