1、实验五 查找与排序本科学生综合性实验报告(封面)项目组长郑慧乐 学号 0174280 成 员 郑慧乐 专 业 物联网 班级 173 实验项目名称实验五 查找与排序指导教师及职称黄淑英 开课学期 2018 至 2019 学年第一 学期上课时间 2018 年 12 月 3 日学生实验报告学生姓名郑慧乐学号0174280同组人:略实验项目实验五 查找与排序必修 选修 演示性实验 验证性实验 操作性实验 综合性实验实验地点H113实验仪器台号略指导教师黄淑英实验日期及节次星期一下午三节课一、实验目的及要求:1、目的1进一步掌握有序顺序表的折半查找算法。2进一步巩固排序的算法,编写对20个及以上的无序数
2、据进行希尔排序和快速排序的实现程序。2、内容及要求1.建立一20个及以上数据的有序顺序表,表中可以仅存放记录的关键字,实现对该有序的折半查找算法,测试数据应充分考虑查找成功和查找不成功两种情况。2.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行希尔排序,给出每一趟希尔排序的结果。3.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行快速排序,给出每一趟快速排序的结果。2、仪器用具:DevC+3、实验方法与步骤:#includeusing namespace std;#define OK 1#define MAXSIZE 20t
3、ypedef int KeyType;typedef int InfoType;typedef struct KeyType key; InfoType otherinfo;RedType;typedef struct RedType RMAXSIZE + 1; int length;SqList;int Search_Bin (SqList ST, KeyType key) KeyType low, high, mid; low = 1; high = ST.length; while (low = high) mid = (low + high) / 2; if (key = ST.Rmi
4、d.key) return mid; else if (key ST.Rmid.key) high = mid - 1; else low = mid + 1; return OK;void ShellInsert (SqList &L, int dk) int i, j; for (i = dk + 1; i = L.length; +i) if (L.Ri.key 0 & L.R0.key L.Rj.key; j-= dk) L.Rj + dk = L.Rj; L.Rj + dk = L.R0; void ShellSort (SqList &L, int dt, int t) for (
5、int k = 0; k t; +k) ShellInsert (L, dtk); for (int i = 1; i = 20 ; i+) cout L.Ri.key ; cout endl; int Partition (SqList &L, int low, int high) KeyType pivotkey; L.R0 = L.Rlow; pivotkey = L.Rlow.key; while (low high) while (low = pivotkey) -high; L.Rlow = L.Rhigh; while (low high & L.Rlow.key = pivot
6、key) +low; L.Rhigh = L.Rlow; L.Rlow = L.R0; for (int i = 1; i = 20 ; i+) cout L.Ri.key ; cout endl; return low;void QSort (SqList &L, int low, int high) KeyType pivotloc; if (low high) pivotloc = Partition (L, low ,high); QSort (L, low, pivotloc - 1); QSort (L, pivotloc + 1, high); void QuickSort (S
7、qList &L) QSort (L, 1, L.length);int main () SqList ST, L1, L2; ST.length = 0; L1.length = L2.length = 0; int dt3 = 7, 5, 1, dk = 10, t = 3; int a, key; cout 请建立20个数据的有序顺序表: endl; for (int i = 1; i ST.Ri.key; ST.length +; for (int i = 1; i = 2; i+) cout 请输入想要查找的数值(折半查找): key; a = Search_Bin (ST, key
8、); if (ST.Ra.key = key) cout 数值 key 查找成功! endl; else cout 数值 key 查找失败! endl; cout 请建立20个数据的无序顺序表(输入数值): endl; for (int i = 1; i L1.Ri.key; L1.length +; cout 希尔排序结果为: endl; ShellInsert (L1, dk); ShellSort (L1, dt, t); cout 请建立20个数据的无序顺序表(输入数值): endl; for (int i = 1; i L2.Ri.key; L2.length +; cout 快速排序结果为: endl; QuickSort (L2);四、实验结果与数据处理: 五、讨论与结论InitList(SqList &L)可省,可以把RedType *R改成RedType RMAXSIZE + 1;for (int i = 1; i = 20 ; i+)cout L.ri.key ;在递归的快速排序中放置位置需正确,应放到枢轴位置后;折半查找的查找成功与不成功两种形式可以用if表示。六、指导教师评语及成绩:评语:指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值成绩: 指导教师签名: 批阅日期
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1