zoukankan      html  css  js  c++  java
  • 软考之排序算法(一)——插入排序

        在看软考视频的时候。会发现一到排序算法就開始晕。各种排序算法种类繁多,看着都眼花缭乱的,今天我们就来整理整理这些排序算法。

    ******************************************************************************************************

        经常使用的排序算法有插入排序、选择排序、交换排序、归并排序、基数排序。

    当中插入排序又分为直接插入排序、希尔排序;选择排序又分为简单选择排序、堆排序;交换排序又分为冒泡排序和高速排序。这5大类8种排序算法都属于内部排序(什么是内部排序全部的排序都在内存中完毕的叫做内部排序,假设内存中装不下这些数据,须要内存外存配合起来使用的叫做外部排序)以下我们就来 一一介绍一下这些排序算法。

    1、插入排序:直接插入排序

    定义两个表一个无序表一个有序表,每次从无序表中取出一个元素,把它插入到有序表中的合适位置。使有序表有序。

    详细做法在往有序表中插入第n的记录时,依次依照从前往后的顺序将这条记录与有序表中的逐条记录进行比較,使之插入到有序表中合适的位置。

    举例如果一个无序表10,1,4;有序表为:2,3,7,9。现依照从小到大的顺序将无序表中的记录插入到有序表中。

    依次将10与有序表中2,3,7,9进行比較2<3<7<9<10。所以将10放在有序表中9的后面。则该有序表变成了2,3,7,9,10。

    依次将1与有序表中2,3,7,9,10进行比較。事实上在第一次比較的时候1<2,已经比較出须要将1放在2的前面了,因此不须要进行后面2、3、4、5次的比較。但为了显示效果我将全部的比較过程都列出来了。如上图。

    依次将4与有序表中1,2,3,7,9,10进行比較。在第4次比較的时候4<7,所以将4放在7的前面。至此利用直接插入排序算法已经将所有数据排序完成。终于得到的数列是1,2,3,4,7,9,10

    2、插入排序:希尔排序

    介绍希尔排序又称为缩小增量排序,是针对直接排序算法的一种改进,是插入排序算法的一种。

    定义先将整个待排记录序列切割成若干个子序列,然后进行直接插入排序,待整个序列中的记录基本有序时,再对总体进行一次直接插入排序。

    (由此可见。希尔排序与直接插入排序相比适合于数据量较大的排序。假设数据量较小则直接採用直接插入排序算法;假设数据量较大则採用希尔排序算法)

    详细做法先取一个小于n的整数d1作为第一个增量(就是增量小于待排序数列的个数且尽量保证增量为奇数),把待排数列分成d1个组,将全部距离为d1倍数序号的记录放在同一个组中。在各个组内进行直接插入排序;然后去第二个增量d2且保证d2<d1,反复上面的排序工作。

    以此类推直至所取增量为1,也就是将全部的记录放在同一组中进行直接插入排序算法为止。

    举例定义比較繁琐,我们还是来举样例说明。如果待排数据为5,2,9,1,4,7。现将此数列依照从小到大的顺序进行排列。由于此数列共6个数。所以我们取的增量值要小于6,第一个增量为3。

     

     第二次排序定为增量为1。也就是全部的记录都放在同一个组内。这时候进行直接插入排序。

     

    ******************************************************************************************************

        限于篇幅的原因,这篇博客先到这里。

    兴许还会继续将其它排序算法依次进行总结,敬请期待!

     

  • 相关阅读:
    DateTime类型的一个Bug
    无痛苦的软件维护——被遗忘的需求
    完全命令行.NET开发
    无痛苦的软件维护——文档和代码
    .NET初学者架构设计指南(一)Hello world的时代
    NGOSS的一点简单概念
    软件的逻辑层次
    VSTS for Testers学习笔记目录
    How Google Tests Software (出书,停止更新)
    推荐——《浪潮之巅》(据传稍后会出书,停止更新)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5225616.html
Copyright © 2011-2022 走看看