查找和排序数据结构.docx
- 文档编号:2996886
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:59.78KB
查找和排序数据结构.docx
《查找和排序数据结构.docx》由会员分享,可在线阅读,更多相关《查找和排序数据结构.docx(12页珍藏版)》请在冰豆网上搜索。
查找和排序数据结构
数据结构实验报告
姓名:
否
学号:
班级:
计科1001
题目:
查找和排序
完成日期:
2012.6.8
成绩:
一,需求分析:
1:
程序分析
1)本程序主要完成了对一堆数字的查找和排序,其中查找只有一种方法,而排序有多种方法,主要是冒泡排序,快速插入排序,希尔排序,堆排序。
并且通过执行的次数可以判断其中的排序效率。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“菜单”,由用户根据自己的需求在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算提示以及信息输入显示在其后。
当你不想输入信息时,你可以按G结束该次操作,
2:
程序执行命令包括:
菜单
A:
冒泡排序
B:
折半查找
C:
直接排序
D:
希尔排序
E:
快速排序
F:
排序之前
G:
退出程序
3:
测试数据:
依次输入:
AFCFDFEFB
二概要设计:
1:
顺序存储结构的抽象数据类型定义为:
ADTList{
数据对象:
D={ai|ai∊ElemSet,i=1,2,...n,n>=0}
数据关系:
R1={
基本操作:
maopao();
初始条件:
存在一个数据组,其顺序随意。
操作结果:
将所给的一组数据排序,并且输出其执行的次数。
insertsort()
初始条件:
存在一个数据组,其顺序随意。
操作结果:
将所给的一组数据排序,并且输出其执行的次数。
shellsort()
初始条件:
存在一个数据组,其顺序随意。
操作结果:
将所给的一组数据排序,并且输出其执行的次数。
qsort()
初始条件:
存在一个数据组,其顺序随意。
操作结果:
将所给的一组数据排序,并且输出其执行的次数。
output()
初始条件:
存在一个数据组,其顺序随意。
操作结果:
数超出排序前的顺序。
search_Bin()
初始条件:
存在一个数据组,其顺序随意。
操作结果:
折半查找某个特定元素。
}ADTSet
2.本程序包含二个大模块:
1)主程序模块:
voidmain(){
初始化;
do{
接受命令;
处理命令;
}while("命令"=“退出”);
}
2)输出模块
三,详细设计
#include
#include
#include
typedefstruct{
intkey;
intdata;
}SElemType;
typedefstruct{
SElemType*elem[21];
intlength;
}SSTable;
staticintsum=0;
//快速排序
intpartition(SSTable*L,intlow,inthigh)
{
intpivotkey;
L->elem[0]=L->elem[low];sum++;
pivotkey=L->elem[low]->data;
while(low while((low high--; L->elem[low]=L->elem[high];sum++; while((low low++; L->elem[high]=L->elem[low]; sum++; } L->elem[low]=L->elem[0];sum++; returnlow; } voidqsort(SSTable*L,intlow,inthigh) { intpivotloc; if(low pivotloc=partition(L,low,high); qsort(L,low,pivotloc-1); qsort(L,pivotloc+1,high); } } //希尔排序 voidshellinsert(SSTable*st,intdk) { inti,j; for(i=dk+1;i<=st->length-1;++i) if(st->elem[i]->data { st->elem[0]=st->elem[i];sum++; for(j=i-dk;j>0&&st->elem[j]->data>st->elem[0]->data;j-=dk) {st->elem[j+dk]=st->elem[j];sum++;} st->elem[j+dk]=st->elem[0];sum++; } } voidshellsort(SSTable*st,intdlta[],intt) { intk,j; sum=0; for(k=0;k shellinsert(st,dlta[k]); printf("希尔排序的结果是: \n"); for(j=1;j printf("%d",st->elem[j]->data); printf("\n希尔排序的次数是: %d\n",sum); printf("\n"); } //直接排序 voidinsertsort(SSTablest) { inti,j; sum=0; for(i=2;i<=st.length-1;++i) if(st.elem[i]->data { st.elem[0]=st.elem[i];sum++; for(j=i-1;st.elem[j]->data>st.elem[0]->data;--j) {st.elem[j+1]=st.elem[j];sum++;} st.elem[j+1]=st.elem[0];sum++; } printf("直接排序的结果是: \n"); for(j=1;j printf("%d",st.elem[j]->data); printf("\n直接排序的次数是: %d\n",sum); } //折半查找 intsearch_Bin(SSTablest,intk) { intlow,high,mid; low=1;high=st.length; while(low<=high){ mid=(low+high)/2; if(st.elem[mid]->key==k)returnmid; if(st.elem[mid]->key>k)high=mid-1; elselow=mid+1; } return0; } //冒泡排序 voidmaopao(SSTablest) { inti=0,j=0; sum=0; for(j=1;j for(i=1;i if(st.elem[i]->data>st.elem[i+1]->data) { inttemp; temp=st.elem[i]->data;sum++; st.elem[i]->data=st.elem[i+1]->data;sum++; st.elem[i+1]->data=temp;sum++; } printf("冒泡排序的结果是: \n"); for(j=1;j printf("%d",st.elem[j]->data); printf("\n冒泡排序的次数是: %d\n",sum); } //输出函数 voidoutput(SSTablest) { intj; printf("输出的结果是: \n"); for(j=1;j printf("%d",st.elem[j]->data); printf("\n"); } voidmain() { inti=0; inttext[21]={0,11,4,55,72,38,64,87,22,9,97,99,10,15,49,86,48,19,56,14,59}; intT[3]={5,3,1}; charc; SElemTypeS[21]; SSTableST; SSTable*temp; for(i=0;i<21;i++) {//text.length() S[i].key=i+1; S[i].data=text[i]; ST.elem[i]=&S[i]; } ST.length=21; temp=&ST; //text.length(); printf("菜单\n"); printf("A: 冒泡排序\n"); printf("B: 折半查找\n"); printf("C: 直接排序\n"); printf("D: 希尔排序\n"); printf("E: 快速排序\n"); printf("F: 排序之前\n"); printf("G: 退出程序\n"); do{ printf("请选择: "); c=getchar();//scanf("%c",&c); fflush(stdin); for(i=0;i<21;i++) {//text.length() S[i].key=i+1; S[i].data=text[i]; ST.elem[i]=&S[i]; } temp=&ST; switch(c) { case'A': { maopao(ST); break; } case'B': { printf("折半查找的数据是: %d\n",ST.elem[search_Bin(ST,ST.length)]->data); break; } case'C': { insertsort(ST); break; } case'D': { shellsort(temp,T,3); break; } case'E': { intj;sum=0; qsort(temp,1,ST.length-1); printf("快速排序的结果是: \n"); for(j=1;j printf("%d",ST.elem[j]->data); printf("\n快速排序的次数是: %d\n",sum); break; } case'F': { output(ST); break; } } }while(c! ='G'); }creatUDG(G)DFSTraverse(G)BFSTraverse(G) } 函数的调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 数据结构