实验五 查找与排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档