贵州民族学院数据结构课件 第五章.pptVIP

  • 0
  • 0
  • 约2.16万字
  • 约 103页
  • 2019-05-06 发布于广东
  • 举报
第 五章 内排序 第 五章 内排序 5.1 基本概念 5.2 插入排序 5.3 选择排序 5.4 交换排序 5.5 分配排序 5.6 归并排序 5.7 各排序算法的理论和实验时间代价 5.8 排序问题的下限 5.1 基本概念 分类 内排序(Internal Sorting):整个排序过程中,所有的记录都可以直接存放在内存中 外排序(External Sorting):内存无法容纳所有记录,排序过程中还需要访问外存 注,在排序中常用“记录”替代结点,由记录序列构成“文件”——线性表 按排序所用的策略的不同排序的方法可分为五种:插入排序,选择排序,交换排序,分配排序,归并排序。 5.1 基本概念 记录(Record):结点,进行排序的基本单位 关键码(Key):唯一确定记录的一个或多个域 排序码(Sort Key) :记录中的一个或多个字段 其值是排序运算的依据 可以是关键码,排序的结果是唯一的 也可以不是关键码,排序的结果可能不唯一 类型:整数,字符串,结构体。为讲述上的方便,我们讨论一字段整型关键码 5.1 基本概念 排序 (Sorting):给定一个序列 R ={r1, r2,···,rn},其相应的排序码序列为k ={k1,k2 ,···,kn}。排序就是这样的运算:将R中的记录按照特定的顺序重新排列,形成一个新的有序序列 R’= {r’1, r’2,···,r’n} 相应排序码为k’ ={k’1, k’2,···,k’n},它们有关系: k’1≤k’2≤···≤k’n 或 k’1≥k’2≥···≥k’n 前者称为不减序,后者称为不增序 5.1 基本概念 关系是任意的,如经常使用的小于、大于等 稳定与不稳定:若记录序列中的任意两个记录 Rx,Ry 的排序码 kx=ky ;如果在排序之前和排序之后,这两个记录的相对位置保持不变,则这种排序方法是稳定的,否则是不稳定的 5.1 基本概念 排序中的两种基本操作: 比较两个排序码的大小(通常是必须的) 将记录从一个位置移动至另一个位置(可用存储结构避免) 排序的结果 记录物理重排:移动记录 辅助表物理重排:移动辅助表目 记录和辅助表目均不移动:辅助表用指针链表示排序后记录的位置 5.1 基本概念 正序与逆序序列 “正序”序列:待排序序列正好符合排序要求 “逆序” 序列:把待排序序列逆转过来,正好符合排序要求 待排序的记录序列的存储方式 顺序表 记录用顺序表存储,另用地址向量(辅助表)存放各记录的地址 静态链表 5.1 基本概念 排序算法的评价标准 算法执行的时间开销(最重要的标志):主要可用算法执行中比较次数和移动次数来衡量。(后述给出最坏或平均情况估算) 执行算法所需的附加空间:通常所用附加空间量不大 算法本身的复杂程度 5.2 插入排序 5.2.1 直接插入排序 5.2.2 二分法(折半)插入排序 5.2.3 表插入排序 5.2.4 Shell排序 5.2 .1 直接插入排序 算法思想:逐个处理待排序的记录,每个新记录都要与前面那些已排好序的记录进行比较,然后插入到适当的位置 排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个已排好子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序 算法IS[直接插入排序] IS1[置排序趟数初值] i←2 IS2[设置监视哨及移动初值] R[0]←R[i],j←i-1 IS3[找插入位置] 若R[0].keyR[j].key则执行IS4,否则执行IS5 IS4[记录后移] R[j+1]←R[j],j←j-1,反复执行IS3 IS5[插入] R[j+1]←R[0] IS6[排序完成否] 若i=n算法结束,排序结果在R中,否则i←i+1,反复执行IS2 C函数 void InsertSort( Rcdlist R, int n ){ int i,j; for(i=2;i=n;i++) { R[0]=R[i]; //设置监视哨 j=i-1; //从有序子序列的最末元素开始比较 while(R[0].keyR[j].key) {R[j+1]=R[j]; j--; } //第j个元素的排序码大于 哨位上的元素排序码则后移 R[j+1]=R[0] ; } //for } // InsertSort 5.2.2 二分法插入排序 直接插入排序中,在插入记录Ri时,改用二分法来查找插入的位置 算法思想:在插入Ri时,前面的记录R1, R2 ,···, Ri -1已经排好序了,因此可有二分法找到Ri的插入位置 5.2.2 二

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档