(完整版)冒泡排序和二分查找实验报告

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

冒泡排序和二分查找实验报告

一实验题目: 基于冒泡排序的二分查找

二实验要求:

2.1: 输出在顺序表中利用二分的方法查找关键字 9 的过程。

2.2:实现冒泡排序的过程,并输出{9,8,7,6,5,4,3,2,1,0}的过程三实验内容:

3.1 动态查找表的抽象数据类型:

ADT DynamicSearchTable {

数据对象D:D是具有相同特性的数据元素的集合。各个数据元素均含有类型相同,可唯一标识数据元素的关键字

数据关系R:数据元素同属一个集合。

基本操作 P:

InitDSTable(&DT);

操作结果:构造一个空的动态查找表DT。

DestroyDSTable(&DT)

初始条件:动态查找表DT存在。

操作结果:销毁动态查找表DT。

SearchDSTable(DT,key);

初始条件:动态查找表DT存在,key为和关键字类型相同的给定值。

操作结果:若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。

InsertDSTable(&DT,e);

初始条件:动态查找表DT存在,e为待插入的数据元素。

操作结果:若DT中不存在其关键字等于e.key的数据元素,则插入e到DT。

DeleteDSTable(&DT,key);

初始条件:动态查找表DT存在,key为和关键字类型相同的给定值。

操作结果:若DT中存在其关键字等于key的数据元素,则删除之。

TraverseDSTable(DT,visit());

初始条件:动态查找表DT存在,visit是对结点操作的应用函数。

操作结果:按某种次序对DT的每个结点调用函数visit()一次且至多一次,一旦visit() 失败,则操作失败。

}ADT DynamicSearchTable

3.2存储结构的定义;

///二分查找

#define maxn 100

typedef struct

{

int key;

char data[10];

}NodeType;

typedef NodeType SeqList[maxn];

///冒泡排序

#define maxn 20

typedef struct

{

int key;

char data[10];

} RecType;

3.3基本操作实现:

int BinSearch(SeqList R, int n ,int k)

{

int l = 0, r = n - 1,mid , count = 0;

while(l <= r)

{

mid = (l + r)/2;

printf(" 第%d 次比较:在[ %d , %d ] 中比较元素R[%d]: %d\n",++count,l,r,mid,R[mid].key);

if(R[mid].key == k)

{

return mid;

}

else if(R[mid].key > k)

{

r = mid - 1;

}

else

{

l = mid + 1;

}

}

return -1;

}

void BubbleSort(RecType R[],int n)

{

int i, j, k;

RecType temp;

for(i = 0;i < n - 1; ++i)

{

for(j = n - 1; j > i; --j)

{

if(R[j].key < R[j - 1].key)

{

temp = R[j];

R[j] = R[j - 1];

R[j - 1] = temp;

}

}

printf("i = %d ,冒出的最小关键字: %d ,结果为:",i, R[i].key); for(k = 0;k < n; ++k)

printf("%2d",R[k].key);

printf("\n");

}

}

3.4解题思路:

二分查找:因为原本便是顺序表,是递增序列,所以在一个区间中,我们只要每次判断中间节点和被查找的关键字的大小关系,就可以判断被查找的节点在那一段区

间了,然后再进行二分即可。

冒泡排序:通过一次一次的交换,把无序序列中关键字最小的节点的值交换到前面即可。

3.5解题过程:

实验源代码如下:

3.5.1二分查找

#include

#define maxn 100

typedef struct

{

int key;

char data[10];

}NodeType;

typedef NodeType SeqList[maxn];

int BinSearch(SeqList R, int n ,int k)

{

int l = 0, r = n - 1,mid , count = 0;

while(l <= r)

{

mid = (l + r)/2;

printf(" 第%d 次比较:在[ %d , %d ] 中比较元素R[%d]: %d\n",++count,l,r,mid,R[mid].key);

if(R[mid].key == k)

{

return mid;

相关文档
最新文档