zoukankan      html  css  js  c++  java
  • [算法学习笔记]直接插入排序笔记

    直接插入排序概念:

    带排元素放在elem[0...n-1]中,初始化时,elem[0]自成1个有序区,无序区为elem[1...n-1],从i=1起,到i=n-1,依次将elem[i]插入有序区[0...n-1]中

    直接插入排序算法步骤:

    1.在当前有序区域R[1,i-1]中查找R[i]的正确插入位置K(1<=K<=i-1)

    2.将R[K,i-1]中的记录均向后移动

    3.移动后腾出K位置,插入R[i]

    (最坏)时间复杂度:O(n^2)

    空间复杂度:O(1)

            /// <summary>
            /// 步骤:(正序)
            /// 1.从带排序列中获取待排元素,记录
            /// 2.依次比较有序集合中的各个元素(从有序集合中的最后一个开始向前比较)
            /// 3.如果待插入元素小与比较元素,则比较元素向后移动一个位置
            /// 3.否则结束内层循环,此时的下标j+1则为待排元素的位置
            /// 
            /// 关键点:
            /// 1.第一个元素被当做是有序序列,故从i=1开始排序
            /// 2.待排元素与有序元素的比较是从有序序列的最后一个元素开始比
            /// 3.在有序序列中,一旦遇到比等排元素小的,则本次比较即为停止,j+1就是待排元素位置
            /// 
            /// [0][1][2][3][4][5][6]
            /// 
            /// 88 16 8 27 24 49 78
            /// 
            /// 88 16 8 27 24 49 78
            /// 
            /// 16 88 8 27 24 49 78
            /// 
            /// 8 16 88 27 24 49 78
            /// 
            /// 8 16 27 88 24 49 78
            /// 
            /// 8 16 24 27 88 48 78
            /// 
            /// 8 16 24 27 48 88 78
            /// 
            /// 8 16 24 27 49 78 88
            /// </summary>
            /// <param name="elements"></param>
            static void InsertSort(int[] elements)
            {
                int i;
                int j;
    
                for (i = 1; i < elements.Length; i++)
                {
                    //记录需要插入的数据(带排元素)
                    int standBy = elements[i];
    
                    // 内层循环是遍历有序序列
                    // 从有序序列中的最后一个开始比较
                    for (j = i - 1; j >= 0; j--)
                    {
                        // 如果待排元素比有序元素小,则向后移动
                        if (standBy < elements[j])
                            elements[j + 1] = elements[j];
                        else // 一旦条件不成立,则视为找到目标位置
                            break;
                    }
    
                    elements[j + 1] = standBy;
                }
            }
            static void Main(string[] args)
            {
                int[] elements = { 88, 68, 25, 6, 12, 57, 78, 12 };
    
                // 调用直接插入排序
                InsertSort(elements);
                
                foreach(int e in elements)
                {
                    Console.Write( e + " ");
                }
            }
  • 相关阅读:
    企业大数据-之机器数据
    实践和感悟
    企业级大数据处理方案03-数据流程
    scala数据库工具类
    企业生产环境集群稳定性-HA就行吗?
    企业级大数据处理方案-02.环境决定需求、性能决定选型
    Scala编程之访问修饰符
    spark-submit提交参数设置
    window.location
    [转载]Arguments
  • 原文地址:https://www.cnblogs.com/hellenism/p/3726441.html
Copyright © 2011-2022 走看看