数据结构实验4_第1页
数据结构实验4_第2页
数据结构实验4_第3页
数据结构实验4_第4页
数据结构实验4_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据构造实验报告4(一)题目按下述原则编写快排的非递归算法:一趟排序以后,若子序列已有序(无互换),则不参加排序,不然先对长度较短的子序列进行排序,且将另一子序列的上、下界入栈保留;若待排记录数<=3,则不再进行切割,而是直接进行比较排序。测试实例:{49386597761327498821105}(二)算法思路成立储存序列上下界的栈序列。对栈顶作以下判断:A.若栈顶中记录的头与尾相距小于3,对对应的子序列进行排序,而后出栈,进入(3);B.若栈顶中记录的头与尾相距大于等于3,则进行分块,判断分块能否有序,a.若两分块都有序,则出栈,进入(3);b.若只有一分块有序,则改变栈顶内容为无序分块内容,进入(3);c.若两分块都无序,则改变栈顶内容为较长的无序块,而后把较短的无序块压进栈。进入

(3)(3)重复(2)的操作,直至栈空,获得最后结果。(三)程序构造定义的构造体及申明#defineMAX_SEQ100//最大输入数typedefstruct_stack{intleft;//lowerboundintright;//upperboundstruct_stack*next;}qstack;//tostorethechildsequence'slowerboundandupperbound主函数变量及其说明变量名

说明intarray[MAX_SEQ]

储存输入序列intn

输入的序列长度重要函数以及说明函数名功能变量说明boolsorted(int*arr,intleft,intright)判断序列能否有序arr为等排序的数组,left为下界,right为下界。有序或许是left>right时返回true,不然返回falsevoidsort(int*arr,intleft,intright)给三个或三个以下的arr为等排序的数组;left为序列排序下界;right为下界。voidqsort(int*arr,intleft,intright)迅速排序同上(四)源码#include<iostream>#defineMAX_SEQ100usingnamespacestd;typedefstruct_stack{intleft;//lowerboundintright;//upperboundstruct_stack*next;}qstack;//tostorethechildsequence'sleftandrightvoidsort(int*arr,intleft,intright){for(inti=left;i<=right;i++){

//sortchildsequencelessthan3intk=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){for(inti=left;i<right;i++){if(arr[i]>arr[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,sortandpopsort(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<mr){if(mm==ml){if(arr[mr]>=k)mr--;else{arr[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->right=mm-1;}elseif(l&&!r){//rightchildsequenceisn'tsorted,thenchangethetophead->left=mm+1;}elseif(!l&&!r){//bothsequencesaren'tsorted,thenchangethetopone//tothelongersequence,pushtheshorteronetothestackp=newqstack;if(mm-head->left>head->right-mm){p->left=mm+1;p->right=head->right;head->right=mm-1;}else{p->left=head->left;p->right=mm-1;head->left=mm+1;}p->next=head;head=p;}else{//bothsequencesaresorted,thenpophead=head->next;}}}}intmain( ){intarray[MAX_SEQ];intn;while(cout<<"inputthelengthofthesequence:",cin>>n){cout<<"input"<<n<<"numbers\n";for(inti=0;i<n;i++)cin>>array[i];qsort(array,0,n-1);cout<<"afterquicksorted:\n";for(inti=0;i<n;i++)cout<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论