• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > 数据结构教程 第三十六课 选择排序、归并排序

数据结构教程 第三十六课 选择排序、归并排序

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了数据结构教程,数据结构教程李春葆,数据结构视频教程,数据结构教程第四版,c语言数据结构教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

教学目的: 掌握选择排序,归并排序算法

教学重点: 选择排序之堆排序,归并排序算法

教学难点: 堆排序算法

授课内容:

一、选择排序

每一趟在n-i+1(i=1,2,...n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

二、简单选择排序

算法:

Smp_Selecpass(ListType &r,int i)

{

k=i;

for(j=i+1;j<n;i++)

if (r[j].key<r[k].key)

k=j;

if (k!=i)

{ t=r[i];r[i]=r[k];r[k]=t;}

}

Smp_Sort(ListType &r)

{

for(i=1;i<n-1;i++)

Smp_Selecpass(r,i);

}

三、树形选择排序

又称锦标赛排序,首先对n个记录的关键字进行两两比较,然后在其中一半较小者之间再进行两两比较,如此重复,直到选出最小关键字的记录为止。

四、堆排序

只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。

什么是堆?n个元素的序列{k1,k2,...,kn}当且仅当满足下列关系时,称之为堆。关系一:ki<=k2i 关系二:ki<=k2i+1(i=1,2,...,n/2)

堆排序要解决两个问题:1、如何由一个无序序列建成一个堆?2、如何在输出堆顶元素之后,调整剩余元素成为一个新的堆?

问题2的解决方法:


sift(ListType &r,int k,int m)

{

i=k;j=2*i;x=r[k].key;finished=FALSE;

t=r[k];

while((j<=m)&&(!finished))

{

if ((j<m)&&(r[j].key>r[j+1].key)) j++;

if (x<=r[j].key)

finished:=TRUE;

else {r[i]=r[j];i=j;j=2*i;}

}

r[i]=t;

}

HeapSort(ListType &r)

{

for(i=n/2;i>0;i--) sift(r,i,n);

for(i=n;i>1;i--){

r[1]<->r[i];

sift(r,i,i-1)

}

}

五、归并排序

将两个或两个以上的有序表组合成一个新的有序表的方法叫归并。

假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复。

merge(ListType r,int l,int m,int n,ListType &r2)

{

i=l;j=m+1;k=l-1;

while(i<=m) and(j<n) do

{

k=k+1;

if (r[i].key<=r[j].key) {r2[k]=r[i];i++;}

else {r2[i]=r[j];j++}

}

if (i<=m) r2[k+1..n]=r[i..m];

if (j<=n) r2[k+1..n]=r[j..n];

}

mergesort(ListType &r,ListType &r1,int s,int t)

{

if (s==t)

r1[s]=r[s];

else

{

mergesort(r,r2,s,s+t/2);

mergesort(r,r2,s+t/2+1,t);

merge(r2,s,s+t/2,t,r1);

}

]

六、总结

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 数据结构教程
  • 数据结构教程 第十课 栈的表示与实现
  • 数据结构教程 第九课 循环链表与双向链表
  • 数据结构教程 第八课 线性表的链式表示与实现
  • 数据结构教程 第七课 实验一 线性表的顺序存储实验
  • 数据结构教程 第六课 线性表的顺序表示和实现
  • 数据结构教程 第五课 线性表的类型定义
  • 数据结构教程 第三十五课 实验七 查找
  • 数据结构教程 第三十四课 插入排序、快速排序
  • 数据结构教程 第三十三课 哈希表(二)

相关文章

  • 2018-08-06倒叙打印链表
  • 2017-06-28迭代算法与递归算法的概念及区别
  • 2017-06-28数据结构教程 第三十六课 选择排序、归并排序
  • 2017-06-28计算字符串的相似度
  • 2017-06-28数据结构教程
  • 2017-06-28数据结构教程 第四十课 总复习
  • 2017-08-17 苹果(01背包)
  • 2017-06-28数据结构教程 第七课 实验一 线性表的顺序存储实验
  • 2017-06-28链表的c语言实现(二)
  • 2017-06-28数据结构C语言实现之队列

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 确定n微秒时高能质点和低能质点的数目
    • 数据结构教程 第十一课 栈的应用
    • 数据结构教程 第二十四课 遍历二叉树
    • 链表的建立、插入和删除
    • 数据结构教程 第三十八课 文件概念、顺序文件
    • 算法学习之旅,初级篇(30)-–删除链表内节点
    • 数据结构教程 第三十七课 实验八 排序实验
    • 数据库理论:学习基于SQL数据库的算法
    • HDU-2017 多校训练赛8-补题
    • A*寻路初探

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有