希尔排序实验报告.docx

上传人:b****2 文档编号:24515295 上传时间:2023-05-28 格式:DOCX 页数:9 大小:38.32KB
下载 相关 举报
希尔排序实验报告.docx_第1页
第1页 / 共9页
希尔排序实验报告.docx_第2页
第2页 / 共9页
希尔排序实验报告.docx_第3页
第3页 / 共9页
希尔排序实验报告.docx_第4页
第4页 / 共9页
希尔排序实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

希尔排序实验报告.docx

《希尔排序实验报告.docx》由会员分享,可在线阅读,更多相关《希尔排序实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

希尔排序实验报告.docx

希尔排序实验报告

 

数据结构实验报告(实验五)

 

实验人:

颜建学

班级:

4101090703

实验时间:

6.8

实验学时:

2

实验地点:

260

 

实验题目:

排序

实验目的:

1.掌握常规的几种排序方法:

插入排序,选择排序,交换排序

2.了解各种排序方法的优劣适应数据,稳定性。

实验内容:

1.用希尔排序算法对用户输入的一组数据按关键字进行排序输出

2.(选作题)使用快速排序算法对用户输入的一组数据按关键字进行排序并输出

3.(选作题)使用堆排序方法用户输入的一组数据按关键字进行排序并输出

实验用到数据结构:

逻辑结构:

数组

存储结构:

顺序存储结构

结构定义,功能函数声明如下:

#include

#include

#defineMAXSIZE20//一个用作示例的小顺序表的最大长度

typedefintKeytype;//定义关键字类型为整数类型

typedefstruct{

Keytypekey;//关键字项

}RedType;//记录类型

typedefstruct{

RedTyper[MAXSIZE+1];//r[0]闲置或用作哨兵

intlength;//顺序表长度

}SqList;//顺序表类型

typedefSqListHeapType;

voidShellInsert(SqList&L,intdk);

voidShellSort(SqList&L,intdlta[],intt);

intPartition(SqList&L,intlow,inthigh);

voidQSort(SqList&L,intlow,inthigh);

voidQuickSort(SqList&L);

voidprin(SqList&L,intlenth);

typedefSqListHeadType;

voidHeadAdjust(HeadType&H,ints,intm);

voidHeapSort(HeadType&H);

具体实现:

#include

#include

#defineMAXSIZE20//一个用作示例的小顺序表的最大长度

typedefintKeytype;//定义关键字类型为整数类型

typedefstruct{

Keytypekey;//关键字项

}RedType;//记录类型

typedefstruct{

RedTyper[MAXSIZE+1];//r[0]闲置或用作哨兵

intlength;//顺序表长度

}SqList;//顺序表类型

typedefSqListHeapType;

voidShellInsert(SqList&L,intdk);

voidShellSort(SqList&L,intdlta[],intt);

intPartition(SqList&L,intlow,inthigh);

voidQSort(SqList&L,intlow,inthigh);

voidQuickSort(SqList&L);

voidprin(SqList&L,intlenth);

typedefSqListHeadType;

voidHeadAdjust(HeadType&H,ints,intm);

voidHeapSort(HeadType&H);

voidShellInsert(SqList&L,intdk)

{

inti,j;

for(i=dk+1;i<=L.length;i++)

{

if(L.r[i].key

{

L.r[0]=L.r[i];

for(j=i-dk;j>0&&L.r[0].key

{

L.r[j+dk]=L.r[j];

}

L.r[j+dk]=L.r[0];

}

}

}

voidShellSort(SqList&L,intdlta[],intt)

{

inti;

for(i=0;i

{

ShellInsert(L,dlta[i]);

}

}

intPartition(SqList&L,intlow,inthigh)

{

intp;

L.r[0].key=L.r[low].key;

p=L.r[low].key;

while(low

{

while(low=p)

high--;

L.r[low].key=L.r[high].key;

while(low

low++;

L.r[high].key=L.r[low].key;

}

L.r[low].key=L.r[0].key;

returnlow;

}

voidQSort(SqList&L,intlow,inthigh)

{

intp;

if(low

{

p=Partition(L,low,high);

QSort(L,low,p-1);

QSort(L,p+1,high);

}

}

voidHeapAdjust(HeapType&H,ints,intm)//m为表长

{

intrc=H.r[s].key;

intj;

for(j=2*s;j<=m;j*=2)

{

if(j

++j;

if(rc>=H.r[j].key)

break;

H.r[s].key=H.r[j].key;

s=j;

}

H.r[s].key=rc;

}

voidHeapSort(HeapType&H)

{

inti;

inttemp;

for(i=H.length/2;i>=1;--i)

{

HeapAdjust(H,i,H.length);

}

for(i=H.length;i>1;--i)

{

temp=H.r[1].key;

H.r[1].key=H.r[i].key;

H.r[i].key=temp;

HeapAdjust(H,1,i-1);

}

}

voidprin(SqList&L,intlenth)

{

inti;

for(i=1;i<=lenth;i++)

{

printf("%d\t",L.r[i].key);

}

printf("\n");

}

voidQuickSort(SqList&L)

{

QSort(L,1,L.length);

}

intmain()

{

SqListL;

inti,k;

L.length=20;

inta[21]={0,23,45,6,89,7,36,26,13,18,76,98,78,68,53,36,72,79,65,46,25};

intdlta[4]={7,5,3,1};

for(i=0;i<21;i++)

{

L.r[i].key=a[i];

}

prin(L,20);

printf("请输入k的值,1,希尔排序;2,快速排序;3堆排序,其他不排序");

switch(scanf("%d",&k))

{

case1:

ShellSort(L,dlta,4);

prin(L,20);

break;

case2:

QuickSort(L);

prin(L,20);

break;

case3:

HeapSort(L);

prin(L,20);

break;

default:

break;

}

return0;

}

实验结果:

实验心得:

通过这次实验让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把理论知识与实际结合起来才能提高自己的运用能力和独立思考的能力。

在本次实验中,让我加深的了解希尔排序的几种方法以及概念,并对以往所学的的知识得到了巩固。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1