查找排序应用实验.docx
- 文档编号:2258967
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:15
- 大小:140.66KB
查找排序应用实验.docx
《查找排序应用实验.docx》由会员分享,可在线阅读,更多相关《查找排序应用实验.docx(15页珍藏版)》请在冰豆网上搜索。
查找排序应用实验
淮海工学院计算机科学系
实验报告书
课程名:
《数据结构》
题目:
查找、排序的应用实验
班级:
学号:
姓名:
排序、查找的应用实验报告要求
1目的与要求:
1)查找、排序是日常数据处理过程中经常要进行的操作和运算,掌握其算法与应用对于提高学生数据处理能力和综合应用能力显得十分重要。
2)本次实验前,要求同学完整理解有关排序和查找的相关算法和基本思想以及种算法使用的数据存储结构;
3)利用C或C++语言独立完成本次实验内容或题目,程序具有良好的交互性(以菜单形式列出实验排序和显示命令,并可进行交互操作)和实用性;
4)本次实验为实验成绩评定主要验收内容之一,希望同学们认真对待,并按时完成实验任务;
5)本次实验为综合性实验,请于2012年12月23日按时提交实验报告(纸质报告每班10份);
6)下周开始数据结构课程设计,务必按时提交实验报告,任何同学不得拖延。
2实验内容或题目
题目:
对记录序列(查找表):
{287,109,063,930,589,184,505,269,008,083}分别实现如下操作:
1)分别使用直接插入排序、冒泡排序、快速排序、简单选择排序、堆排序(可选)、链式基数排序算法对纪录序列进行排序,并显示排序结果;
2)对上述纪录列表排好序,然后对其进行折半查找或顺序查找;
(特别要求:
使用菜单机制,在一个主程序下实现题目要求的排序和查找以及结果显示)
3实验步骤与源程序
#include
#include
/*链式基数法排序声明*/
#defineRADIX10
#defineKEY_SIZE6
#defineLIST_SIZE20
#defineTRUE1
#defineFALSE0
typedefintKeyType;
typedefintOtherType;
typedefstruct
{
KeyTypekey[KEY_SIZE];/*子关键字数组*/
OtherTypeother_data;/*其它数据项*/
intnext;/*静态链域*/
}RecordType1;
typedefstruct
{
RecordType1r[LIST_SIZE+1];/*r[0]为头结点*/
intlength;
intkeynum;
}SLinkList;/*静态链表*/
typedefintPVector[RADIX];
typedefstruct
{
intnext;
KeyTypekey;
OtherTypeother_data;
}RecordType;
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+1]=r[j]; j=j-1; } r[j+1]=r[0];/*将待插入记录插入到已排序的序列中*/ } }/*InsSort*/ //顺序查找 voidSeqSearch(RecordTyper[],intlength,KeyTypek) { inti; r[0].key=k; i=length; while(r[i].key! =k)i--; printf("该元素在数组中的位置是%d",i); } //冒泡排序 voidBubbleSort(RecordTyper[],intlength) /*对记录数组r做冒泡排序,length为数组的长度*/ { intn,i,j; intchange; RecordTypex; 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]; r[j]=r[j+1]; r[j+1]=x; change=TRUE; } } }/*BubbleSort*/ //快速排序 intQKPass(RecordTyper[],intleft,intright) /*对记录数组r中的r[left]至r[right]部分进行一趟排序,并得到基准的位置,使得排序后的结果满足其之后(前)的记录的关键字均不小于(大于)于基准记录*/ { RecordTypex; intlow,high; x=r[left];/*选择基准记录*/ low=left; high=right; while(low { while(low /*high从右到左找小于x.key的记录*/ high--; if(low { r[low]=r[high]; low++; } /*找到小于x.key的记录,则进行交换*/ while(low low++; if(low { r[high]=r[low]; high--; }/*找到大于x.key的记录,则交换*/ } r[low]=x;/*将基准记录保存到low=high的位置*/ returnlow;/*返回基准记录的位置*/ }/*QKPass*/ voidSelectSort(RecordTyper[],intlength) /*对记录数组r做简单选择排序,length为数组的长度*/ { inti,j,k,n; RecordTypex; n=length; for(i=1;i<=n-1;++i) { k=i; for(j=i+1;j<=n;++j) if(r[j].key if(k! =i) { x=r[i]; r[i]=r[k]; r[k]=x; } } } voidQKSort(RecordTyper[],intlow,inthigh) /*对记录数组r[low..high]用快速排序算法进行排序*/ { intpos; if(low { pos=QKPass(r,low,high);/*调用一趟快速排序,将枢轴元素为界划分两个子表*/ QKSort(r,low,pos-1);/*对左部子表快速排序*/ QKSort(r,pos+1,high);/*对右部子表快速排序*/ } } //堆排序 voidsift(RecordTyper[],intk,intm) /*假设r[k..m]是以r[k]为根的完全二叉树,且分别以r[2k]和r[2k+1]为根的左、右子树为大根堆,调整r[k],使整个序列r[k..m]满足堆的性质*/ { RecordTypet; inti,j; intx; intfinished; t=r[k];/*暂存"根"记录r[k]*/ x=r[k].key; i=k; j=2*i; finished=FALSE; while(j<=m&&! finished) { if(j j=j+1;/*若存在右子树,且右子树根的关键字大,则沿右分支"筛选"*/ if(x>=r[j].key) finished=TRUE;/*筛选完毕*/ else { r[i]=r[j]; i=j; j=2*i; }/*继续筛选*/ } r[i]=t;/*r[k]填入到恰当的位置*/ } voidcrt_heap(RecordTyper[],intlength) /*对记录数组r建堆,length为数组的长度*/ { inti,n; n=length; for(i=n/2;i>=1;--i)/*自第[n/2]个记录开始进行筛选建堆*/ sift(r,i,n); } voidHeapSort(RecordTyper[],intlength) /*对r[1..n]进行堆排序,执行本算法后,r中记录按关键字由大到小有序排列*/ { inti,n; RecordTypeb; crt_heap(r,length); n=length; for(i=n;i>=2;--i) { b=r[1];/*将堆顶记录和堆中的最后一个记录互换*/ r[1]=r[i]; r[i]=b; sift(r,1,i-1);/*进行调整,使r[1..i-1]变成堆*/ } }/*HeapSort*/ //链式基数排序 voidDistribute(RecordType1r[],inti,PVectorhead,PVectortail) /*记录数组r中记录已按低位关键字key[i+1],…,key[d]进行过"低位优先"排序。 本算法按第i位关键字key[i]建立RADIX个队列,同一个队列中记录的key[i]相同。 head[j]和tail[j]分别指向各队列中第一个和最后一个记录(j=0,1,2,…,RADIX-1)。 head[j]=0表示相应队列为空队列*/ { intj; intp; for(j=0;j<=RADIX-1;++j) head[j]=0;/*将RADIX个队列初始化为空队列*/ p=r[0].next;/*p指向链表中的第一个记录*/ while(p! =0) { j=r[p].key[i];/*用记录中第i位关键字求相应队列号*/ if(head[j]==0) head[j]=p;/*将p所指向的结点加入第j个队列中*/ else r[tail[j]].next=p; tail[j]=p; p=r[p].next; } }/*Distribute*/ voidCollect(RecordType1r[]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 应用 实验