数据结构实验4.doc

数据结构实验4.doc

ID:35984797

大小:99.00 KB

页数:4页

时间:2019-04-29

数据结构实验4.doc_第1页
数据结构实验4.doc_第2页
数据结构实验4.doc_第3页
数据结构实验4.doc_第4页
资源描述:

《数据结构实验4.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据结构实验报告4(一)题目1.按下述原则编写快排的非递归算法:(1)一趟排序之后,若子序列已有序(无交换),则不参加排序,否则先对长度较短的子序列进行排序,且将另一子序列的上、下界入栈保存;(2)若待排记录数<=3,则不再进行分割,而是直接进行比较排序。测试实例:{49386597761327498821105}(二)算法思路(1)建立存储序列上下界的栈序列。(2)对栈顶作如下判断:A.若栈顶中记录的头与尾相距小于3,对对应的子序列进行排序,然后出栈,进入(3);B.若栈顶中记录的头与尾相距大于等于3

2、,则进行分块,判断分块是否有序,a.若两分块都有序,则出栈,进入(3);b.若只有一分块有序,则改变栈顶内容为无序分块内容,进入(3);c.若两分块都无序,则改变栈顶内容为较长的无序块,然后把较短的无序块压进栈。进入(3)(3)重复(2)的操作,直至栈空,得到最终结果。(三)程序结构定义的结构体及声明#defineMAX_SEQ100//最大输入数typedefstruct_stack{intleft;//lowerboundintright;//upperboundstruct_stack*next;

3、}qstack;//tostorethechildsequence'slowerboundandupperbound主函数变量及其说明变量名说明intarray[MAX_SEQ]存储输入序列intn输入的序列长度重要函数以及说明函数名功能变量说明boolsorted(int*arr,intleft,intright)判断序列是否有序arr为等排序的数组,left为下界,right为下界。有序或者是left>right时返回true,否则返回falsevoidsort(int*arr,intleft,in

4、tright)给三个或三个以下的序列排序arr为等排序的数组;left为下界;right为下界。voidqsort(int*arr,intleft,intright)快速排序同上(四)源码#include#defineMAX_SEQ100usingnamespacestd;typedefstruct_stack{intleft;//lowerboundintright;//upperboundstruct_stack*next;}qstack;//tostorethechildseq

5、uence'sleftandrightvoidsort(int*arr,intleft,intright){//sortchildsequencelessthan3for(inti=left;i<=right;i++){intk=i;for(intj=i+1;j<=right;j++){if(arr[k]>arr[j])k=j;}if(k!=i){intt;t=arr[k];arr[k]=arr[i];arr[i]=t;}}}boolsorted(int*arr,intleft,intright){fo

6、r(inti=left;iarr[i+1])returnfalse;}returntrue;}voidqsort(int*arr,intleft,intright){qstack*head;head=newqstack;head->left=left;head->right=right;head->next=NULL;qstack*p;while(head!=NULL){if(head->right-head->left<3){//iflessthan3,so

7、rtandpopsort(arr,head->left,head->right);p=head;head=head->next;deletep;}else{//generally,separatethesequenceintml=head->left,mr=head->right;intmm=ml;intk=arr[mm];//findtheposition,thekeypartofquicksortwhile(ml=k)mr--;else{arr[

8、mm]=arr[mr];mm=mr;}}if(mm==mr){if(arr[ml]>k){arr[mm]=arr[ml];mm=ml;}elseml++;}}arr[mm]=k;booll=sorted(arr,head->left,mm-1);boolr=sorted(arr,mm+1,head->right);if(!l&&r){//leftchildsequenceisn'tsorted,thenchangethetophead->r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。