教学内容1、插入排序(直接插入排序、折半插入排序、希尔.pptVIP

  • 10
  • 0
  • 约1.23万字
  • 约 44页
  • 2019-04-11 发布于湖北
  • 举报

教学内容1、插入排序(直接插入排序、折半插入排序、希尔.ppt

数据结构 第十章 内部排序 制作:计算机科学与技术系 徐振中 教学内容 1、插入排序(直接插入排序、折半插入排序、 希尔排序); 2、交换排序(起泡排序、快速排序); 3、选择排序(直接选择排序、堆排序); 4、归并排序; 5、基数排序; 排序:将数据元素的一个任意序列,重新排列成一个按关键 字有序的序列。 10.1 概述 例:将关键字序列:52, 49, 80, 36, 14, 58, 61, 23 调整为:14, 23, 36, 49, 52, 58, 61, 80 若按主关键字排序则结果惟一。 若按次关键字排序则结果可以不惟一(因有相同关键字)。 设 Ki、Kj (1≤i≤n, 1≤j≤n, i≠j ) 分别为记录 Ri、Rj 的关键 字,且 Ki = Kj ,在排序前的序列中 Ri 领先于 Rj(即 i j )。若 在排序后的序列中 Ri 仍领先于 Rj ,则称所用的排序方法是稳定 的;反之,则称所用的排序方法是不稳定的。 概 述 概 述 例:设排序前的关键字序列为:52, 49, 80, 36, 14, 58, 36, 23 若排序后的关键字序列为:14, 23, 36, 36, 49, 52, 58, 80, 则排序方法是稳定的。 若排序后的关键字序列为:14, 23, 36, 36, 49, 52, 58, 80, 则排序方法是不稳定的。 内部排序和外部排序   若整个排序过程不需要访问外存便能完成,则称此类排序 问题为内部排序; 反之,若参加排序的记录数量很大,整个序列的排序过程 不可能在内存中完成,则称此类排序问题为外部排序。 排序方法分类: 1)、插入排序:直接插入排序、折半插入排序、希尔排序 2)、交换排序:冒泡排序、快速排序 3)、选择排序:简单选择排序、堆排序 4)、归并排序:2-路归并排序 5)、基数排序 10.2 插入排序 有序序列 R[1 .. i -1] R[i] 无序序列 R[i .. n] 一趟直接插入排序的基本思想: 有序序列 R[1 .. i] 无序序列 R[i +1 .. n] 实现“一趟插入排序”可分三步进行: 3.将 R[i] 插入(复制)到 R[ j+1] 的位置上。 2.将 R[ j+1 .. i -1] 中的所有记录均后移一个位置; 1.在 R[1 .. i -1] 中查找 R[i] 的插入位置, R[1 .. j].key ? R[i].key R[ j+1 .. i -1].key; 插 入 排 序 插 入 排 序 10.2.1 直接插入排序 初始状态 49 38 65 97 76 13 27 49 R0 R1 R2 R3 R4 R5 R6 R7 R8 i =2 i =3 38 49 65 97 76 13 27 49 i =4 38 49 65 97 76 13 27 49 i =5 38 49 65 76 97 13 27 49 76 i =6 38 49 65 76 97 13 27 49 13 i =7 38 49 65 76 97 13 27 49 27 i =8 38 49 65 76 97 13 27 49 49 49 38 65 97 76 13 27 49 38 49 38 7 趟 排序 1 趟 排序 2 趟 排序 void InsertSort ( SqList L ) { // 对顺序表 L 作直接插入排序。 for ( i = 2; i = L.length; ++ i ) if (L.r[i].key L.r[i -1].key) { } } // InsertSort 排序过程:先将序列中第 1 个记录看成是一个有序子序列, 然后从第 2 个记录开始,逐个进行插入,直至整个序列有序

文档评论(0)

1亿VIP精品文档

相关文档