版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构与算法课程实验报告
实验六:排序实践
姓名:沈靖雯
班级: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 考研高分子纳米涂层牙釉质仿生修复材料往年重点真题试卷
- 高职体育课程思政资源研究论文
- 2026年心理学题库(含答案)
- 2026年医院感染防控模拟试题及答案详解
- 2026年杨帆最后冲刺三国法练习题(含答案)
- 双循环下返乡创业青年挑战研究论文
- 2026年养老护理员初级模拟练习题(含答案)
- 2026年我国纺织服装行业报告
- 灵活就业者社保参保教育程度差异研究论文
- 2026年新疆克州事业单位招聘考试职业能力倾向测验绝密模拟题库(含答案)
- 2026半导体材料行业发展分析及前景趋势与投融资策略研究报告
- 中国烟草招聘行测+专业知识考试题库(附答案)
- GA/T 1043-2025智能交通管理系统前端设备运行维护规范
- JJG 596-2026 安装式交流电能表检定规程
- 大连理工大学《光学》2024 - 2025 学年第一学期期末试卷
- 2026年上海市春季高考英语试卷试题完整版(含答案+听力MP3)
- 媒体创意与策划
- 2025年-2020中国近代史获奖教案-新版
- 《机械制图》电子教材
- 游泳馆入股合同协议书
- OTDR使用课件教学课件
评论
0/150
提交评论