软考之排序算法(一)——插入排序

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

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

    常用的排序算法有插入排序、选择排序、交换排序、归并排序、基数排序。其中插入排序又分为直接插入排序、希尔排序;选择排序又分为简单选择排序、堆排序;交换排序又分为冒泡排序和快速排序。这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,也就是所有的记录都放在同一个组内,这时候进行直接插入排序。

 

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

    限于篇幅的原因,这篇博客先到这里。后续还会继续将其他排序算法依次进行总结,敬请期待!

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值