- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 排序
计科系 王丹丹
主要内容
排序的基本概念与分类
冒泡排序
简单选择排序
直接插入排序
希尔排序
堆排序
归并排序
快速排序
9.2 排序的基本概念与分类
9.2.1 排序的稳定性
27
16
9
31
7
24
17
9
7
9
9
16
17
24
27
31
7
9
9
16
17
24
27
31
Data
稳定性排序:Data
不稳定性排序:Data
9.2.2 内排序与外排序
按待排序记录所在位置分类
内排序:待排序的所有记录全部被放置在内存中。
外排序:排序过程需要对外存进行访问的排序。
影响内排序性能的因素
时间性能
衡量其好坏的最重要的标志。高效率的排序算法应是尽可能少的关键字比较次数和记录移动次数。
辅助空间
衡量的主要标准。辅助空间是除了存放待排序所占用的存储空间之外,执行算法所需要的其他存储空间。
算法复杂性
算法本身的复杂性。
按排序依据原则分类
插入排序
交换排序
选择排序
归并排序
直接插入排序、希尔排序
冒泡排序、快速排序
直接选择排序、堆排序
2-路归并排序
基数排序
多关键字排序
9.2.3 排序用到的结构与函数
排序的基本操作
排序用顺序表结构
#define MAXSIZE 10//用于要排序数组个数最大值typedef struct
{
int r[MAXSIZE+1]; //用于存储要排序数组
//r[0]用作哨兵或临时变量
int length;
}SqList;
比较两个关键字
将记录从一个位置移动到另一个位置
数组两元素的交换函数
/*交换L中数组r的下标i和j的值*/
void swap(SqList *L, int i, int j)
{
int temp = L-r[i];
L-r[i] = L-r[j];
L-r[j] = temp;
}
9.3 冒泡排序
冒泡排序(Bubble Sort)的基本思想
两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
冒泡排序的实现步骤
将第一个记录的关键字与第二个记录的关键字进行比较,若为反序L-r[1]L-r[2],则交换;比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止——第一趟冒泡排序。
对前n-1个记录进行第二趟冒泡排序,使关键字次大的记录被安置在第n-1个记录位置。
重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止。
9.3.1 最简单排序实现
/*对顺序表L作交换排序(冒泡排序初级版)*/
void BubbleSort0(SqList *L)
{
int i, j;
for (i = 1; i L-length; i++)
{
for (j = i + 1; j =L-length; j++)
{
if (L-r[i]L-r[j])
{
swap(L, i, j);//交换L-r[i]与L-r[j]的值
}
}
}
}
9.3.2 冒泡排序算法
/*对顺序表L作冒泡排序*/
void BubbleSort(SqList *L)
{
int i, j;
for (i = 1; i L-length; i++)
{
for (j = L-length-1; j = i; j--)
{
if (L-r[j]L-r[j+1])
{
swap(L, j, j+1); //交换L-r[j]与L-r[j+1]的值
}
}
}
}
与上一算法的差异:注意j是从后往前循环。
9.3.3 冒泡排序优化
如果待排序的序列是{2,1,3,4,5,6,7,8,9},即除了第一和第二的关键字需要交换外,别的都已经是正常的顺序,但仍然将i=2到9以及每个循环中的j都执行一遍。
尽管并没有交换数据,但是之后的大量比较还是大大地多余了。
冒泡程序是否还可以优化呢?
9.3.3 冒泡排序优化
/*对顺序表L改进冒泡算法*/
void BubbleSort2(SqList *L)
{
int i, j;
Status flag = TRUE; //flag用来作为标记
for (i = 1; i L-length flag; i++) //若flag为true则退出循环
{
flag = FALSE; //初始为false
for (j = L-length - 1; j = i; j--)
{
if (L-r[j]L-r[j+1])
{
swap(L, j, j+1); //交换L-r[j]与L-r[j+1]的值
flag = TRUE; //如果有数据交
您可能关注的文档
- 上课氓ft讲述.ppt
- 《山羊兹拉特》最新课件讲述.ppt
- 《直线与平面垂直的判定》全市高中数学优质课讲述.ppt
- 《商务礼仪》讲述.ppt
- 《植树的牧羊人》用讲述.ppt
- 《植物基础》课程整体设计讲述.ppt
- 《商鞅南门立木》课件最新精品讲述.ppt
- 《纸品乐陶陶》学习活动一讲述.ppt
- 《质量管理学》名词解释汇总讲述.doc
- 第八章国际货款收付重点.ppt
- springbooot+vue基于java的房屋维修系统毕业论文.doc
- 中国消防救援学院《单片机系统实验》2023-2024学年第一学期期末试卷.doc
- 2025年溧阳纺织化学品项目申请.pptx
- 景区门票包销合同模板(3篇).docx
- 【股票技术指标学习指南】第七章第三节货币需要量的测算.doc
- 2025春 _ 人教版七年级英语下册【unit4】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit5】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit6】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit7】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit8】看音标写单词.doc
最近下载
- 《中国利用外资情况》课件.ppt VIP
- 花艺空间装置课件.pptx VIP
- 2024年巴东县选调县外在职在编教师真题.docx VIP
- 2025年广州市中考语文试题卷(含答案及解析).docx
- 农村生态环境保护与可持续发展.pptx VIP
- GB50243-2016通风与空调工程施工质量验收规范附条文.docx VIP
- 合伙公司章程丶教育咨询管理有限公司章程丶劳动合同范本.doc(doc21页).docx VIP
- 三级眼镜验光员理论考试题库(下部分).pdf VIP
- 2025湖北恩施州巴东县选调县外在职在编教师35人笔试备考题库及答案解析.docx VIP
- GBT5836.1-2018 建筑排水用硬聚氯乙烯(PVC-U)管材.pdf VIP
文档评论(0)