查找和排序算法的实现(实验七)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七查找和排序算法的实现

一.实验目的及要求

(1)学生在实验中体会各种查找和内部排序算法的基本思想、适用场合,理解开发高效算法的可能性和寻找、构造高效算法的方法。

(2)掌握运用查找和排序解决一些实际应用问题。

二.实验内容:

(1)编程实现一种查找算法(如折半查找、二叉排序树的查找、哈希查找等),并计算相应的ASL。

(2)编程实现一种内部排序算法(如插入排序、快速排序等)。

三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)

(1)编程实现一种查找算法(如折半查找、二叉排序树的查找、哈希查找等),并计算相应的ASL。

➢程序代码:

折半查找:

头文件:

#define EQ(a,b) ((a)==(b))

#define LT(a,b) ((a)<(b))

#define maxlength 20

typedef int ElemType;

typedef struct{

ElemType key;

ElemType other;

}card;//每条记录包含的数据项

typedef struct{

card r[maxlength];

int length;

}SSTable;//一张表中包含的记录容量

void Create(SSTable &L);

int Search(SSTable L,int elem);

功能函数:

#include"1.h"

#include"stdio.h"

void Create(SSTable &L)

{

printf("新的线性表已经创建,请确定元素个数(不超过20)\n");

scanf("%d",&L.length);

printf("请按递增序列输入具体的相应个数的整数元素(空格隔开)\n");

for(int i=0;i

{

scanf("%d",&L.r[i].key);

}

}

int Search(SSTable L,int elem)

{

if(L.r[L.length-1].keyelem)

{

printf("表中没有该元素(不在范围内)\n");

return 0;

}

int low=0,high=L.length-1;

int mid;

while(low<=high)

{

mid=(low+high)/2;

if(EQ(L.r[mid].key,elem)){printf("该元素在第%d位\n",mid+1); return 0;}

else if(LT(elem,L.r[mid].key))

{

high=mid-1;

}

else

{

low=mid+1;

}

}

printf("表中没有该元素(不在范围内)\n");

return 0;

}

主函数:

#include"stdio.h"

#include"1.h"

int main()

{

SSTable L;

Create(L);

printf("\n");

printf("此时的线性表元素:\n");

for(int a=0;a

{

printf("%d ",L.r[a].key);

}

printf("\n");

printf("\n");

int elem;

do

{

printf("请输入要查找的元素(输入000表示结束程序)\n");

scanf("%d",&elem);

if(elem!=000)

{

Search(L,elem);

}

}while(elem!=000);

return 0;

}

➢运行结果:

(2)编程实现一种内部排序算法(如插入排序、快速排序等)。

程序代码部分:

直接插入排序

头文件:

#define maxlength 20//最大数据容量

#define OK 1

typedef int Status;

typedef int Other;

typedef int KeyType;

typedef struct{

KeyType key;

Other data;

}Red;

typedef struct{

Red r[maxlength+1];//加了个哨兵的位置

int length;//当前数据个数

}SqList;

Status Init(SqList &L);

Status Insertsort(SqList &L);

功能函数:

#include"stdio.h"

#include"1.h"

Status Init(SqList &L)

{

printf("新的线性表以创建,请确定元素个数(不超过20)\n");

scanf("%d",&L.length);

printf("请输入具体的相应个数的整数元素(空格隔开)\n");

for(int i=1/*将哨兵的位置【0】空出来*/;i

{

scanf("%d",&L.r[i].key);

}

return OK;

}

Status Insertsort(SqList &L)

{

for(int i=2;i

{

L.r[0]=L.r[i];//交换的应该是该位置记录的完整数据项,而不仅仅是数据项中的一个key

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

{

L.r[j]=L.r[j-1];

}

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

}

相关文档
最新文档