实验五 查找与排序.docx
《实验五 查找与排序.docx》由会员分享,可在线阅读,更多相关《实验五 查找与排序.docx(9页珍藏版)》请在冰豆网上搜索。
![实验五 查找与排序.docx](https://file1.bdocx.com/fileroot1/2023-6/21/57fbd49a-e866-4ed3-9530-bda1041332e5/57fbd49a-e866-4ed3-9530-bda1041332e51.gif)
实验五查找与排序
本科学生综合性实验报告
(封面)
项目组长_郑慧乐___学号_0174280____
成员郑慧乐
专业_物联网___班级_173___
实验项目名称_____实验五查找与排序
指导教师及职称___黄淑英_______
开课学期2018至_2019学年_第一_学期
上课时间2018年12月3日
学生实验报告
学生姓名
郑慧乐
学号
0174280
同组人:
略
实验项目
实验五查找与排序
□必修□选修
□演示性实验□验证性实验□操作性实验□综合性实验
实验地点
H113
实验仪器台号
略
指导教师
黄淑英
实验日期及节次
星期一下午三节课
一、实验目的及要求:
1、目的
1.进一步掌握有序顺序表的折半查找算法。
2.进一步巩固排序的算法,编写对20个及以上的无序数据进行希尔排序和快速排序的实现程序。
2、内容及要求
1.建立一20个及以上数据的有序顺序表,表中可以仅存放记录的关键字,实现对该有序的折半查找算法,测试数据应充分考虑查找成功和查找不成功两种情况。
2.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行希尔排序,给出每一趟希尔排序的结果。
3.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行快速排序,给出每一趟快速排序的结果。
2、仪器用具:
DevC++
3、实验方法与步骤:
#include
usingnamespacestd;
#defineOK1
#defineMAXSIZE20
typedefintKeyType;
typedefintInfoType;
typedefstruct
{
KeyTypekey;
InfoTypeotherinfo;
}RedType;
typedefstruct
{
RedTypeR[MAXSIZE+1];
intlength;
}SqList;
intSearch_Bin(SqListST,KeyTypekey)
{
KeyTypelow,high,mid;
low=1;
high=ST.length;
while(low<=high)
{
mid=(low+high)/2;
if(key==ST.R[mid].key)
returnmid;
elseif(keyhigh=mid-1;
else
low=mid+1;
}
returnOK;
}
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].keyL.R[j+dk]=L.R[j];
L.R[j+dk]=L.R[0];
}
}
voidShellSort(SqList&L,intdt[],intt)
{
for(intk=0;k{
ShellInsert(L,dt[k]);
for(inti=1;i<=20;i++)
cout<cout<}
}
intPartition(SqList&L,intlow,inthigh)
{
KeyTypepivotkey;
L.R[0]=L.R[low];
pivotkey=L.R[low].key;
while(low{
while(low=pivotkey)--high;
L.R[low]=L.R[high];
while(lowL.R[high]=L.R[low];
}
L.R[low]=L.R[0];
for(inti=1;i<=20;i++)
cout<cout<returnlow;
}
voidQSort(SqList&L,intlow,inthigh)
{
KeyTypepivotloc;
if(low{
pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);
}
}
voidQuickSort(SqList&L)
{
QSort(L,1,L.length);
}
intmain()
{
SqListST,L1,L2;
ST.length=0;
L1.length=L2.length=0;
intdt[3]={7,5,1},dk=10,t=3;
inta,key;
cout<<"请建立20个数据的有序顺序表:
"<for(inti=1;i<=20;i++)
{
cin>>ST.R[i].key;
ST.length++;
}
for(inti=1;i<=2;i++)
{
cout<<"请输入想要查找的数值(折半查找):
"<cin>>key;
a=Search_Bin(ST,key);
if(ST.R[a].key==key)
cout<<"数值"<"<else
cout<<"数值"<"<}
cout<<"请建立20个数据的无序顺序表(输入数值):
"<for(inti=1;i<=20;i++)
{
cin>>L1.R[i].key;
L1.length++;
}
cout<<"希尔排序结果为:
"<ShellInsert(L1,dk);
ShellSort(L1,dt,t);
cout<<"请建立20个数据的无序顺序表(输入数值):
"<for(inti=1;i<=20;i++)
{
cin>>L2.R[i].key;
L2.length++;
}
cout<<"快速排序结果为:
"<QuickSort(L2);
}
四、实验结果与数据处理:
五、讨论与结论
①InitList(SqList&L)可省,可以把RedType*R改成RedTypeR[MAXSIZE+1];
②for(inti=1;i<=20;i++)
cout<③折半查找的查找成功与不成功两种形式可以用if表示。
六、指导教师评语及成绩:
评语:
指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值
成绩:
指导教师签名:
批阅日期