面试利器(二)-------插入排序(直接插入排序和希尔排序(Shell排序))

来源:互联网 发布:图片 js 点击放大 wap 编辑:程序博客网 时间:2024/05/17 01:13

(一)直接插入排序

   抓住关键字---------------插入

 (1)基本思想

顺序地把待排序的序列中的各个数据按其关键字的大小,插入到已排序的序列的适当位置。

 (2)运行过程

          1、将待排序序列的第一个数据看做一个有序序列,把第二个数据到最后一个数据当成是未排序序列。

          2、从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的数据与有序序列中的某个数据相等,则将待插 入数据插入到相等数据的后面。)

 (3)示例



(二)希尔排序(shell排序)


  抓住关键字---------------插入,分治(前面提示过分治的理解)


  希尔排序是基于插入排序的以下两点性质而提出改进方法的:

          1、插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率。

          2、但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位。

    (1)基本思想

           先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排 序。

     (2)运行过程

              1、选择一个增量序列t1,t2,…,tk,其中对于i>j,有ti>tj,tk=1;(增量因子有多种取法,最简单的是t(i+1) = ti/2)

              2、按增量序列个数k,对序列进行k 趟排序; 

              3、每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

     (3)示例

         



阅读全文
1 0
原创粉丝点击