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;
        }
    }
    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    mysql int类型 int(11) 和int(2)区别
    mysql 用户 登陆 权限相关
    【转】ext4+delalloc造成单次写延迟增加的分析
    write 系统调用耗时长的原因
    【转】通过blktrace, debugfs分析磁盘IO
    win7 wifi热点
    【SystemTap】 Linux下安装使用SystemTap源码安装SystemTap
    pdflush进程介绍与优化【转】
    How to find per-process I/O statistics on Linux
    oom_killer
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321166.html
Copyright © 2011-2022 走看看