zoukankan      html  css  js  c++  java
  • 插入排序

    原理:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子列表当中的适当位置,直到全部记录插入完成为止。对直接插入排序我的理解就是:先将第一个记录视为一个有序序列,然后依次将后面的记录插入到这个有序序列中来。每次要插入的记录时,须从后往前依次比较有序序列中的记录,直到找到在有序序列中的位置,记录下该位置,该位置开始的每个记录都后移一位,然后将插入记录插入该位置。这样每插入一个记录进去,有序序列长度加1,剩余记录减1,直到所有记录都插入到有序序列中,排序完成。例如每次将当前排序的i依次和i-1之前的数据作比较,符合则交换条件,不符合则插入,结束比较,i+1;


    时间复杂度分析:最好情况下为O(n),最坏情况下为O(n*n)。比较次数期望为n*n/4。

    实现步骤:
    ⒈ 从第一个元素开始,该元素可以认为已经被排序
    ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
    ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
    ⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    ⒌ 将新元素插入到下一位置中
    ⒍ 重复步骤2~5


    c#脚本实现:

    private static int[] InsertSort(int[] myArray)
    {
        int i, j,temp;
        for (i = 1; i < myArray.Length; i++)
        {
            temp = myArray[i];//保存当前数据,当前数据即待插入的数据        
            //将数组标号i及i之前的元素,排成递增序列
            for (j = i - 1; j >= 0; j--)
            {
                if( myArray[j] >temp)
                {
                    myArray[j + 1] = myArray[j];
                }else{
                    break;
                }            
            }
          myArray[j + 1] = temp;
        }
    }
    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    删除docker thin 空间解决文件满不能拉起docker问题
    kafka服务端和客户端均无法消费
    prometheus 配置支持consul动态拉取
    spring cloud consul配置
    使用arthas分析慢查询
    nginx日志格式配置
    spring secrity添加和去掉x-frame-options deny安全头
    java POI解析word为文本内容
    sublime text 3 插入当前时间
    CUnit 安装笔记
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321166.html
Copyright © 2011-2022 走看看