数据结构课程设计排序与查找.doc
上传人:天马****23 上传时间:2024-09-12 格式:DOC 页数:20 大小:103KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构课程设计排序与查找.doc

数据结构课程设计排序与查找.doc

预览

免费试读已结束,剩余 10 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

————北京信息科技大学课程设计报告课程名称数据结构课程设计题目排序与查找指导教师设计起止日期设计地点系别信息管理学院专业__信息管理与信息系统_姓名/学号______鲁丹2012012108__课程实践目的:通过本实践使学生对各类排序算法有更深入的了解,在实际应用中学会使用排序算法解决具体问题。课程实践内容:随机产生20个0—100之间的整数,允许有重复分别利用直接插入排序、直接选择排序、快速排序、双向起泡排序对这20个数进行排序(递增递减均可),并统计在各种排序方法中关键字的比较次数,最后输出各类排序方法的排序结果及关键字的比较次数。提示:双向起泡排序是对标准起泡排序算法的改进,该方法第一次自上而下进行“起泡”,使最大元素“下沉”到底,第二次自下而上进行“起泡”,使最小元素“上浮”到顶,之后又重复上述过程,每趟起泡后都会相应缩小下一趟的起泡排序区间,直至排序完成。起泡期间可以通过对某趟“起泡”的“最后交换位置”进行记忆,以尽可能快地缩短下一趟的“起泡”区间。用折半查找法在前面的已排好序的数据表上查找,是否有此数,如有,输出其序号。如没有,在屏幕给出提示信息。实践步骤:#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN100#defineOK1#defineERROR0#defineLIST_INIT_SIZE100#defineLISTINCREMENT10#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefintElemType;typedefstruct{ElemType*elem;intlength;intlistsize;}List;StatusInitList(List&L){L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;}//InitListvoidCreate(List&L,intn){inti;srand(time(NULL));for(i=0;i<n;i++){L.elem[i]=rand()%N;L.length++;printf("%d",L.elem[i]);}printf("\n");}intInsertSort(ListL){inti,j,t,m;m=0;for(i=1;i<L.length;i++){t=L.elem[i];j=i-1;if(t>=L.elem[j])m++;elsem++;while((j>=0)&&(t<L.elem[j])){L.elem[j+1]=L.elem[j];j--;}L.elem[j+1]=t;}returnm;}intSelectSort(ListL){inti,j,k,min,t=0;for(i=0;i<L.length;i++){min=i;for(j=i+1;j<L.length;j++)if(L.elem[j]<L.elem[min]){min=j;t++;}elset++;if(min!=i){k=L.elem[i];L.elem[i]=L.elem[min];L.elem[min]=k;}}returnt;}intQuickSort(ListL,ints,intt){inti=s,j=t,count4=0;if(s<t){L.elem[0]=L.elem[s];do{while(j>i&&L.elem[j]>=L.elem[0]){j--;count4++;}if(i<j){L.elem[i]=L.elem[j];i++;}while(i<j&&L.elem[i]<=L.elem[0]){i++;count4++;}if(i<j){L.elem[j]=L.elem[i];j--;}}while(i<j);L.elem[i]=L.elem[0];QuickSort(L,s,j-1);QuickSort(L,j+1,t);}