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

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

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

•实验目的及要求

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

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

二.实验内容:

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

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

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

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

程序代码:

折半查找:

头文件:

#defi ne EQ(a,b) ((a)==(b))

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

#defi ne maxle ngth 20 typedef int ElemType;

typedef struct{

ElemType key;

ElemType other;

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

typedef struct{

card r[maxle ngth];

int len gth;

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

void Create(SSTable & L); int Search(SSTable L,i nt elem);

功能函数:

#i nclude"1.h" #i nclude"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(" else

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

{

high=mid-1;

}

else

{

low=mid+1;

}

}

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

return 0;

}

主函数:

#include"stdio.h"

#include"1.h" int main() {该元素在第%d 位\n",mid+1); return 0;} \n");

SSTable L;

Create(L);

prin tf("\n");

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

for(i nt a=0;a

{

prin tf("%d "丄.r[a].key);

}

prin tf("\n");

prin tf("\n");

int elem;

do

{

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

sea nf("%d", &elem);

if(elem!=000)

{

Seareh(L,elem);

}

}while(elem!=000);

return 0;

}

运行结果:

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

直接插入排序

头文件:

#defi ne maxle ngth 20/最大数据容量

#defi ne OK 1

typedef int Other;

typedef int KeyType;

typedef int Status;

typedef struct{

KeyType key;

Other data;

}Red;

typedef struct{

Red r[maxle ngth+1];〃加了个哨兵的位置int len gth;//当前数据个数

}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(i nt j=i;j>0&&L.r[0].key

排序的,所以比较的是key,而不是一条记录的所有数据项*/;j--)

{

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

}

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

return OK;

} 主函数:#include"stdio.h" #include"1.h"

int main()

{

SqList L;

Init(L);

printf("\n");

printf(" 排序前的线性表元素:\n");

for(int a=1;a

{

}

相关文档
最新文档