目录

  • 1 绪论
    • 1.1 数据结构的定义和基本术语
    • 1.2 数据的逻辑结构和存储结构
    • 1.3 算法和算法分析
  • 2 线性表
    • 2.1 线性表的定义及逻辑结构
    • 2.2 顺序存储结构
    • 2.3 链式存储结构
    • 2.4 应用:一元多项式的表示和相加
  • 3 栈和队列
    • 3.1 栈
    • 3.2 队列
  • 4 串
    • 4.1 资源
  • 5 数组
    • 5.1 数组
    • 5.2 广义表
  • 6 树和二叉树
    • 6.1 树的定义和基本术语
    • 6.2 二叉树
    • 6.3 遍历二叉树和线索二叉树
    • 6.4 树和森林
    • 6.5 哈夫曼树及其应用
  • 7 图
    • 7.1 图的定义和基本术语
    • 7.2 图的存储结构
    • 7.3 图的遍历
    • 7.4 图的应用
  • 8 查找
    • 8.1 查找的基本概念
    • 8.2 基于线性表的查找
    • 8.3 基于树的查找
    • 8.4 哈希表
  • 9 内部排序
    • 9.1 排序的定义和种类
    • 9.2 插入排序
    • 9.3 B-树和B+树
    • 9.4 交换排序
    • 9.5 选择排序
    • 9.6 归并排序和基数排序
  • 10 实验
    • 10.1 目的要求
      • 10.1.1 参考代码
插入排序

插入排序的基本思想是:将无序序列中的一个或几个记录插入”到有序序列(开始时为空)中,从而增加记录的有序序列的长度。本节介绍两种插入排序:直接插入排序(straight insertion sort)和希尔排序(Shells sort)。

1.直接插入排序

直接插入排序是一种最简单的排序方法。其基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

1】输入元素序列:4562357792551435,按从小到大的序列排序。

初始关键字:i=1  {45}  62  35  77  92  55  14  35

            i=2  {45  62}  35  77  92  55  14  35

            i=3  {35  45  62}  77  92  55  14  35

            i=4  {35  45  62  77}  92  55  14  35

            i=5  {35  45  62  77  92}  55  14  35

            i=6  {35  45  55  62  77  92}  14  35

            i=7  {14  35  45  55  62  77  92}  35

            i=8  {14  35  35  45  55  62  77  92}

【效率分析】对于直接插入排序:

直接插入排序的空间效率:仅用了一个辅助单元。

    直接插入排序的时间复杂度为O(n*n)

    直接插入排序是稳定的排序方法

直接插入排序算法简便,比较适用于待排序记录数目较少且基本有序的情况。当待排记录数目较大时,直接插入排序的性能不是很好。

当记录数量n很大时,则比较次数将大大增加,对于有序表,为了减少关键字的比较次数,可采用折半插入排序。其基本思想是:用折半查找法在有序表中找到正确的插入位置,然后移动记录,空出插入位置,再进行插入。时间复杂度仍为O(n*n),且也为稳定排序方法。

2.希尔排序

希尔排序又称“缩小增量排序”,1959年由D.L.Shell提出来的,也是一种插入排序的方法,但在时间上较直接插入排序方法有较大的改进。

直接插入排序算法简单,在n值较小时,效率比较高,在n值很大时,若序列按关键码基本有序,效率依然较高,其时间效率可提高到O(n)。希尔排序即是从这两点出发,给出插入排序的改进方法。

希尔排序的具体做法为将记录序列分成若干子序列,分别对每个子序列进行插入排序。例如 n 个记录分成 d 个子序列:

{ R[1]R[1+d]R[1+2d]R[1+kd] }

{ R[2]R[2+d]R[2+2d]R[2+kd] }

    

{ R[d]R[2d]R[3d]R[kd]R[(k+1)d] }

中,d 称为增量,它的值在排序过程中从大到小逐渐缩小,直至最后一趟排序减为 1。 

【效率分析】对于希尔排序:

希尔排序的时间复杂度为O(n*n),若待排记录序列为正序时,为O(n)

希尔排序是不稳定的排序方法。

希尔排序的分析是一个复杂的问题,因为它的时间耗费是所取的增量序列的函数,到目前为止,尚未有人求得一种最好的增量序列。