查找排序的应用实验1Word格式文档下载.docx
- 文档编号:15735830
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:23
- 大小:42.17KB
查找排序的应用实验1Word格式文档下载.docx
《查找排序的应用实验1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《查找排序的应用实验1Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
1)顺序查找;
2)分别使用直接插入排序、冒泡排序、快速排序对原纪录序列进行排序;
3)对排好序的纪录序列表进行折半查找;
4)利用原纪录序列建立一颗二叉排序树,并在其上实现特定关键字值结点的查找;
5)按照“除留余数法”哈希构造函数和线性探测再散列的冲突处理方法创建表长为m=11的哈希表;
6)实现5)创建哈希表上的查找。
7)分别简单选择排序、堆排序、链式基数排序算法对数据序列进行排序,并显示排序结果。
3实验步骤与源程序
#include<
stdio.h>
#include<
stdlib.h>
#include<
malloc.h>
math.h>
#defineLIST_SIZE20
#defineKEY_SIZE6
#defineRADIX10
#defineTRUE1
#defineFALSE0
#defineSUCCESS1
#defineUNSUCCESS-1
#defineMAX20
typedefcharKeyType;
typedefintOtherType;
typedefstruct
{KeyTypekey;
OtherTypeother_data;
}RecordType;
{KeyTypekey[KEY_SIZE];
inttype;
intnext;
}RecordType1;
{
RecordType1R[LIST_SIZE+1];
intlength;
intkeynum;
}SLinkList;
typedefintPVector[RADIX];
{RecordTyper[LIST_SIZE+1];
/*r[0]为工作单元*/
}RecordList;
//二叉排序树的创建与查找
#defineENDKEY0
typedefstructnode
KeyTypekey;
/*关键字的值*/
structnode*lchild,*rchild;
/*左右指针*/
}BSTNode,*BSTree;
/*哈希表的创建*/
intkey;
intflag;
//falg=1时表示有关键字,=0时表示没有关键字
}Elemtype;
Elemtype*elem;
//动态分配的哈希表的首地址
intsizeindex;
//hashsize[sizeindex]为当前容量
intcount;
//当前数据元素个数
}HashTable;
/*顺序查找*/
voidSeqSearch(RecordListl,KeyTypek)
/*在顺序表l中顺序查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
inti;
l.r[0].key=k;
i=l.length;
while(l.r[i].key!
=k)i--;
if(i>
=1)
{
printf("
该元素k所在的位置是:
"
);
%d"
i);
}
else
该元素不存在"
}
//直接插入排序
voidInsSort(RecordTyper[],intlength)
/*对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
{
inti,j;
for(i=2;
i<
=length;
i++)
r[0]=r[i];
/*将待插入记录存放到监视哨r[0]中*/
j=i-1;
while(r[0].key<
r[j].key)/*寻找插入位置*/
{
r[j+1]=r[j];
j=j-1;
}
r[j+1]=r[0];
/*将待插入记录插入到已排序的序列中*/
}/*InsSort*/
/*冒泡排序*/
voidBubbleSort(RecordTyper[],intlength)
/*对记录数组r做冒泡排序,length为数组的长度*/
intx,i,n,change,j;
n=length;
change=TRUE;
for(i=1;
i<
=n-1&
&
change;
++i)
change=FALSE;
for(j=1;
j<
=n-i;
++j)
if(r[j].key>
r[j+1].key)
{
x=r[j].key;
r[j]=r[j+1];
r[j+1].key=x;
change=TRUE;
}
//快速排序
intPartition(RecordList&
L,intlow,inthigh)//Partition()sub-function
{intpivotkey;
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];
L.r[low].key<
++low;
L.r[high]=L.r[low];
L.r[low]=L.r[0];
return(low);
}//Partition()end
voidQsort(RecordList&
L,intlow,inthigh)//Qsort()sub-function
{intpivotloc;
if(low<
{pivotloc=Partition(L,low,high);
Qsort(L,low,pivotloc-1);
Qsort(L,pivotloc+1,high);
voidQuickSort(RecordList&
L)//QuickSort()sub-function
{Qsort(L,1,L.length);
//callQsort()
/*对排好的序进行折半查找算法*/
voidBinSrch(RecordListl,KeyTypek)
/*在有序表l中折半查找其关键字等于k的元素,若找到,则函数值为该元素在表中的
位置*/
intlow,high,mid;
low=1;
high=l.length;
/*置区间初值*/
=high)
mid=(low+high)/2;
if(k==l.r[mid].key)
printf("
找到该元素,其位置为%d"
mid);
break;
}/*找到待查元素*/
else
if(k<
l.r[mid].key)
high=mid-1;
/*未找到,则继续在前半区间进行查找*/
else
low=mid+1;
/*继续在后半区间进行查找*/
if(low>
high)printf("
没有找到该元素"
voidInsertBST(BSTree*bst,KeyTypekey)
/*若在二叉排序树中不存在关键字等于key的元素,插入该元素*/
BSTrees;
if(*bst==NULL)/*递归结束条件*/
s=(BSTree)malloc(sizeof(BSTNode));
/*申请新的结点s*/
s->
key=key;
lchild=NULL;
rchild=NULL;
*bst=s;
else
if(key<
(*bst)->
key)
InsertBST(&
((*bst)->
lchild),key);
/*将s插入左子树*/
if(key>
InsertBST(&
rchild),key);
/*将s插入右子树*/
voidCreateBST(BSTree*bst)
/*从键盘输入元素的值,创建相应的二叉排序树*/
KeyTypekey;
*bst=NULL;
scanf("
&
key);
while(key!
=ENDKEY)/*ENDKEY为自定义常量*/
InsertBST(bst,key);
scanf("
voidPreOrder(BSTreeroot)
/*先序遍历二叉树,root为指向二叉树根结点的指针*/
if(root!
=NULL)
%d"
root->
/*输出结点*/
PreOrder(root->
lchild);
/*先序遍历左子树*/
rchild);
/*先序遍历右子树*/
BSTreeSearchBST(BSTreebst,KeyTypekey)
/*在根指针bst所指二叉排序树中,递归查找某关键字等于key的元素,若查找成功,返回指向该元素结点指针,否则返回空指针*/
if(!
bst)
returnNULL;
if(bst->
key==key)
returnbst;
/*查找成功*/
else
if(bst->
key>
key)
returnSearchBST(bst->
lchild,key);
/*在左子树继续查找*/
returnSearchBST(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 应用 实验