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;
        }
    }
    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    【BZOJ1067】【SCOI2007】降雨量(线段树)
    【BZOJ3489】A simple rmq problem(树套树)
    【BZOJ1146】【CTSC2008】网络管理
    【BZOJ3236】【Ahoi2013】作业
    计算几何的一些板
    【BZOJ3173】【Tjoi2013】最长上升子序列(树状数组)
    解决phpmyadmin导入长脚本超时
    make报错make: *** [sapi/cli/php] Error 1
    wampserver配置redis在phpinfo()里面找不到
    阿里云服务器安装Apache环境外网不能访问
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321166.html
Copyright © 2011-2022 走看看