实验五 查找与排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科学生综合性实验报告
(封面)
项目组长_郑慧乐___学号_0174280____
成员郑慧乐
专业_物联网___班级_173___
实验项目名称_____实验五查找与排序
指导教师及职称___黄淑英_______开课学期2018 至_2019 学年_第一_学期上课时间2018 年12 月 3 日
学生实验报告
一、实验目的及要求:
1、目的
1.进一步掌握有序顺序表的折半查找算法。
2.进一步巩固排序的算法,编写对20个及以上的无序数据进行希尔排序和快
速排序的实现程序。
2、内容及要求
1.建立一20个及以上数据的有序顺序表,表中可以仅存放记录的关键字,实现对该有序的折半查找算法,测试数据应充分考虑查找成功和查找不成功两种情况。
2.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行希尔排序,给出每一趟希尔排序的结果。
3.建立一20个及以上数据的无序顺序表,表中可以仅存放记录的关键字,实现对该无序表进行快速排序,给出每一趟快速排序的结果。
二、仪器用具:
DevC++
三、实验方法与步骤:
#include
using namespace std;
#define OK 1
#define MAXSIZE 20
typedef int KeyType;
typedef int InfoType;
typedef struct
KeyType key;
InfoType otherinfo;
}RedType;
typedef struct
{
RedType R[MAXSIZE + 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.R[mid].key)
return mid;
else if (key < ST.R[mid].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.R[i].key < L.R[i - dk].key)
{
L.R[0] = L.R[i];
for (j = i - dk; j > 0 && L.R[0].key < L.R[j].key; j-= dk)
L.R[j + dk] = L.R[j];
L.R[j + dk] = L.R[0];
}
}
void ShellSort (SqList &L, int dt[], int t)
{
for (int k = 0; k < t; ++k)
{
ShellInsert (L, dt[k]);
for (int i = 1; i <= 20 ; i++)
cout << L.R[i].key << " ";
cout << endl;
}
}
int Partition (SqList &L, int low, int high)
{
KeyType pivotkey;
L.R[0] = L.R[low];
pivotkey = L.R[low].key;
while (low < high)
{
while (low < high && L.R[high].key >= pivotkey) --high;
L.R[low] = L.R[high];
while (low < high && L.R[low].key <= pivotkey) ++low;
L.R[high] = L.R[low];
}
L.R[low] = L.R[0];
for (int i = 1; i <= 20 ; i++)
cout << L.R[i].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 (SqList &L)
{
QSort (L, 1, L.length);
}
int main ()
{
SqList ST, L1, L2;
ST.length = 0;
L1.length = L2.length = 0;
int dt[3] = {7, 5, 1}, dk = 10, t = 3;
int a, key;
cout << "请建立20个数据的有序顺序表:" << endl;
for (int i = 1; i <= 20; i++)
{
cin >> ST.R[i].key;
ST.length ++;
}
for (int i = 1; i <= 2; i++)
{
cout << "请输入想要查找的数值(折半查找):" << endl;
cin >> key;
a = Search_Bin (ST, key);
if (ST.R[a].key == key)
cout << "数值" << key << "查找成功!" << endl;
else
cout << "数值" << key << "查找失败!" << endl;