版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构与算法课程实验报告
实验六:排序实践
姓名:沈靖雯
班级:14信科二班
学号:2022326601094
实验六排序实践
【实验内容】
实现各排序算法并进行性能比较
【实验目的】
掌握各排序算法的实现方法,并分析各排序算法的时间和空间性能。
【问题描述】
实现各排序算法,必须实现希尔排序和快速排序算法,其他排序算法选做,
并分析各算法的性能。
【问题实现】
(1)数据结构类
#defineMAXSIZE20
typedefstruct{
intkey;
)Redtype;
typedefstruct{
Redtyper[MAXSIZE+l];
intlength;
}SqList;
(2)主要算法函数:
1).希尔排序;
一趟希尔插入排序代码如下,其中dk为先后记录位置的增量,一次希尔
排序后,记录按增量dk有序:
voidShelllnsert(SqList&QJntdk)〃希尔插入排序
{inti,j;
for(i=dk+l;i<=Q.length;i++)
if(Q.r[i].key<Q.r[i-dk].key){
Q.r[0]=Q.r[i];
for(j=i-dk;j>0&&(Q.r[0].key<Q,r[j].key);j-=dk)
Q.r[j+dk]=Q.r[j];
Q.r[j+dk]=Q.r[O];
}
for(inti=l;i<=Q.length;i++){〃一次希尔排序输出
printf("%d",Q.r[i].key);
)
printf("\n");
}
完整实现序列的希尔排序代码如下,其中增量序列简化为例题所用序列5,3,1:
voidShellsort(SqList&Q)〃希尔排序
{intdlta[10];
for(intk=5;k>0;k-=2){
She川nsert(Qk);
}
)
2).快速排序;
快速排序是对起泡排序的一种改进。下面是一次快速排序的函数代码,
其中pivotkey表示轴枢,用子表第一个记录做轴枢记录,函数返回新的轴枢位置:
intpartition(SqList&Q,intlowjnthigh)
(
Q.r[0]=Q.r[low];
intpivotkey;
pivotkey=Q.r[low].key;
while(low<high){
while(low<high&&Q,r[high].key>=pivotkey)-high;
Q.r[low]=Q.r[high];
while(low<high&&Q,r[low].key<=pivotkey)++low;
Q.r[high]=Q.r[low];
)
Q.r[low]=Q.r[0];
for(inti=l;iv=QJength;i++){//一次快速排序输出
printf(n%d”,Q.r[i].key);
}
printf("\n");
returnlow;
)
递归法完整实现序列的快速排序,每次将序列以轴枢为界分为两部份
(子序列),对子序列分别进行快速排序,再将子序列以其轴枢为界分为两部份
进行快速排序……以此类推直至序列全部排序完成:
voidQSort(SqList&(Xintlowjnthigh){
if(low<high){
intpivotloc;
pivotloc=partition(Q,low,high);
QSort(Q,low,pivotloc-l);
QSort(Q,pivotloc+l,high);
}
}
voidQuickSort(SqList&Q){
QSort(Q,l,Q.length);
)
3).起泡排序;
在写快速排序之前写了起泡排序比对,起泡排序代码详细见附件。
【总结】
希尔排序:将序列分组为子序列分别进行直接插入排序,关键字较小的记录
跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序,只需少
量比较和挪移即可完成排序。时间复杂度具体取决于所取的增量序列函数,相较
于直接插入排序低;希尔排序空间复杂度0(1)。
起泡排序:若初始序列正序,只需一趟排序,进行n-1次比较,不挪移记录,
时间复杂度为0(n);最坏情况即初始序列为逆序,需进行n-1次排序,
(i-l)=n(n-1)/2次比较,并作等数量级挪移,时间复杂度为0(*);起泡
i=n
排序空间复杂度0(1)。
快速排序:作为起泡排序的改进,平均时间为T⑻;由的,k为某个常
avg
数,在所有同数量级(O(nlogn))排序方法中平均性能最好。时间复杂度最好情
况O(nlogn),最坏情况当初始序列按关键字有序或者基本有序时,蜕化为起泡排序,
时间复杂度为。(小)。快速排序空间复杂度O(nlogn)。
相比较而言希尔排序和快速排序时间性能较好,空间性能则希尔排序和起泡
排序较好。
程序运行截图:
图1
^牛:
源代码:
#include<stdio.h>
include<math.h>
#defineMAXSIZE20
typedefstruct{
intkey;
}Redtype;
typedefstruct{
Redtyper[MAXSIZE+1];
intlength;
}SqList;
voidShelllnsert(SqList&Q,intdk)〃希尔插入排序
{intij;
for(i=dk+1;i<=Q.length;i++)
if(Q.r[i].key<Q.r[i-dk].key){
Q.r[0]=Q.r[i];
for(j=i-dk;j>0&&(Q.r[0].key<Q.r[j].key);j-=dk)
Q.r[j+dk]=Q.r[j];
Q.r[j+dk]=Q.r[O];
)
for(inti=1;iv=Q」ength;i++){//一次希尔排序输出
printf("%d",Q.r[i].key);
)
printf("\n");
)
voidShellsort(SqList&Q)〃希尔排序
{intdlta[10];
for(intk=5;k>0;k-=2){
Shelllnsert(Q,k);
〃快速排序
intpartition(SqList&Q,intlow,inthigh){
Q.r[0]=Q.r[low];
intpivotkey;
pivotkey=Q.r[low].key;
while(low<high){
while(low<high&&Q,r[high].key>=pivotkey)-high;
Q.r[low]=Q.r[high];
while(low<high&&Q,r[low].key<=pivotkey)++low;
Q.r[high]=Q.r[low];
)
Q.r[low]=Q.r[0];
for(inti=1;i<=Q」ength;i++){〃一次快速排序输出
printf("%d",Q.r[i].key);
)
printf("\n");
returnlow;
)
voidQSort(SqList&Q,intlowjnthigh){
if(low<high){
intpivotloc;
pivotloc=partition(Q,low,high);
QSort(Q,low,pivotloc-1);
QSort(Q,pivotloc+1,high);
)
)
voidQuickSort(SqList&Q){
QSort(Q,1,Q.length);
)
voidBubbleSort(SqList&Q)〃冒泡排序
{intx,m;
intflag=1;
m=Q.length-1;
while((m>0)&&(flag==1))
{flag=O;
for(intj=1;j<=m;j++)
if(Q.r[j].key>Q.r[j+1].key)
(
flag=1;
x=Q.r[j].key;
Q.r[j].key=Q.r[j+1].key;
Q.r[j+1].key=x;
)
for(inti=1;i<=Q.length;i++){〃一次冒泡排序输出
printf("%d",Q.r[i].key);
)
printf("\n");
m-;
intmain()
{SqListQ,L,M;
printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环卫工用工协议书范本
- 环境采样设备租赁合同流程详解
- 环保工程师工作合同
- 居间服务协议
- 2024年度南京房地产项目竣工验收合同
- 2024年度盾构工程保险服务合同
- 2024年度艺术品买卖合同样本
- 二零二四年度艺人演出合同不超范围
- 二零二四年展会视觉设计平面合同
- 2024年度东莞市二手房交易过户流程合同
- 妇产科门诊规章制度、诊疗常规
- 三基培训之中医基础
- 路面施工技术全套课件
- 山东省普通中小学基本办学条件标准(试行)
- 水利专业工程师面试题库
- “问题链”教学相关的国内外研究现状与发展趋势
- 初中议论文写作讲解通用PPT课件
- 医学伦理学模拟试题及答案
- 伍德里奇计量经济学中文复习资料
- 检验科标本接收流程图
- 火力发电厂ABC级检修管理标准实施细则
评论
0/150
提交评论