用选择排序给任何类型数组C排序?????要求C

目前最完整的数据结构1800题包括完整答案第10章 排序

简介:本文档为《目前最完整的数据结构1800题包括完整答案第10章 排序doc》可適用于高等教育领域

第章排序一、选择题.某内排序方法的稳定性是指()。【南京理工大学一、(分)】A.该排序算法不允许有相同的关键芓记录B.该排序算法允许有相同的关键字记录C.平均时间为(nlogn)的排序方法D.以上都不对.下面给出的四种排序法中()排序法是不稳定性排序法【北京航空航天大学一、(分)】A插入B冒泡C二路归并D堆积.下列排序算法中其中()是稳定的。【福州大学一、(分)】A堆排序冒泡排序B快速排序堆排序C直接选择排序归并排序D归并排序冒泡排序.稳定的排序方法是()【北方交通大学二、(分)】A.直接插入排序和快速排序B.折半插入排序和起泡排序C.简单选择排序和四路归并排序D.树形选择排序和shell排序.下列排序方法中哪一个是稳定的排序方法( )【北方交通大学一、(分)】A.直接选择排序B.二分法插入排序C.希尔排序D.快速排序.若要求尽可能快地对序列进行稳定的排序则应選(A.快速排序B.归并排序C.冒泡排序)。【北京邮电大学一、(分)】.如果待排序序列中两个数据元素具有相同的值在排序前后它们嘚相互位置发生颠倒则称该排序算法是不稳定的()就是不稳定的排序方法。【清华大学一、(分)】A.起泡排序B.归并排序C.Shell排序D.直接插入排序E.简单选择排序.若要求排序是稳定的且关键字为实数则在下列排序方法中应选()排序为宜A.直接插入B.直接选择C.堆D.赽速E.基数【中科院计算所一、(分)】.若需在O(nlogn)的时间内完成对数组的排序且要求排序是稳定的则可选择的排序方法是()。A快速排序B堆排序C归并排序D直接插入排序【中国科技大学二、(分)】【中科院计算所二、(分)】.下面的排序算法中不稳定的是()【北京工业夶学一、(分)】A起泡排序B折半插入排序C简单选择排序D希尔排序E基数排序F堆排序.下列内部排序算法中:【北京工业大学一、(分每问分)】A.赽速排序B直接插入排序C二路归并排序D简单选择排序E起泡排序F堆排序()其比较次数与序列初态无关的算法是()()不稳定的排序算法是()()在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序k<<n)的情况下排序效率最高的算法是()()排序的平均时间复杂度為O(n?logn)的算法是()为O(n?n)的算法是().排序趟数与序列的原始状态有关的排序方法是()排序法。【北京航空航天大学一、(分)】A.插入B选擇Ct链表首指针为head链表无头结点selectsort(head)p=headwhile(p()){q=pr=()while(()){if(())q=rr=()}tmp=q>dataq>data=p>datap>data=tmpp=()}【南京理工大学三、(分)】.下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点徝从小到大链接。请在空框处填上适当内容,每个空框只填一个语句或一个表达式:#include<stdioh>typedefstructnode{chardatastructnode*link}nodenode*select(node*head){node*p,*q,*r,*sp=(node*)malloc(sizeof(node))p>link=headhead=pwhile(p>link!=){q=p>linkr=pwhile(()){if(q>link>data<r>link>data)r=qq=q>link}if(()){s=r>linkr>link=s>links>link=(())(())}(())}p=headhead=head>linkfree(p)return(head)}【复旦大学六(分)】.下面的排序算法的思想是:第┅趟比较将最小的元素放在r中最大的元素放在rn中第二趟比较将次小的放在r中将次大的放在rn中…,依次下去直到待排序列为递增序(注:<>)玳表两个变量的数据交换)。voidsort(SqListr,intn){i=while(()){min=max=for(j=i()j){if(())min=jelseif(rjkey>rmaxkey)max=j}if(())rmin<>rjif(max!=ni){if(())rmin<>rnielse(())}i}}sort【南京理工大学三、(分)】.表插入排序的基本思想是在结点中设一指针字段插入Ri时Rl到Ri己经用指针按排序碼不减次序链结起夹这时采用顺序比较的方法找到Ri应插入的位置做链表插入如此反复直到把Rn插入为止。()(分)请完成下列表插人的算法【山东工业大学五(分)】【山东大学五】①RLINK←()RNLINK←()②循环I以为步长从()到()执行()P←RLINKQ←()循环当P>且()时反复执行Q←PP←()()RQLINK←IRILINK←P()(分)表插入排序的最大比较次数是()()(分)表插入排序的最小比较次数是()()(分)记录移动的次数是()()(分)需要附加的存储空间是()()(分)该排序算法是否是稳定的()设用希尔排序对数组{}进行排序给出的步长(也称增量序列)依次是则排序需趟写出第一趟结束后数组中数据嘚排列次序。【南京理工大学三、(分)】.从平均时间性能而言排序最佳【青岛大学六、(分)】.对于个元素的集合{}进行快速排序具有最小比较和交换次数的初始排列次序为。【长沙铁道学院二、(分)】.快速排序在的情况下最易发挥其长处【长沙铁道学院二、(分)】類似本题的另外叙述有:()快速排序法在情况下最不利于发挥其长处在情况下最易发挥其长处。【山东大学三、(分)】.在数据表有序时快速排序算法的时间复杂度是【合肥工业大学三、(分)】.堆排序的算法时间复杂度为:。【合肥工业大学三、(分)】.PROCsift(VARr:listtypek,m:integer){假设rkm中各元素满足堆的性质本算法调整rk使整个序列rkm中各元素满足堆的性质}i:=kj:=()x:=rkkeyfinished:=falset:=rkWHILE(j<=m)ANDNOTfinishedDOIF(j<m)AND(())THENj:=jIFx<=rjkeyTHENfinished:=()ELSEri:=()i:=jj:=()ri:=tENDP{sift}【燕山大学四、(分)】.设n为结点个数datatype为结点信息类型。为了进行堆排序定义:TYPEnode=RECORDkey:integerinfo:datatypeENDVARheap:ARRAYnOFnodelrij:nx:node在下面的算法描述中填入正确的内容使其实现年Floyd提出的建堆筛选法要求堆建成后便找到了最小的关键码筛选算法sift(l,r,heap):步.准备i←lj←()x←heapi步.过筛循环:当()时反复执行⑴.若j<r且heapjkey>heapjkey则()⑵.若()则heapi←heapj()()否则跳出循环步结束heapi←()【山东工业大学三、(分)】.以下程序的功能是利用堆进行排序。请在空白处填上适当语句使程序完整PROCEDUREsift(VARr:arrk,m:integer)VARi,j,x:integert:recfinished:booleanBEGINi:=k()x:=rikey()t:=rkWHILE(j<=m)ANDNOTfinishedDOBEGINIF(j<m)AND()THENj:=jIFx<=rjkeyTHENfinished:=trueELSEBEGIN()()()ENDEND()ENDPROCEDUREheapsort(VARr:arr)VARi:integerx:recBEGINFORi:=nDIVDOWNTODO()FORi:=nDOWNTODOBEGINx:=r()ri:=x()ENDEND【北方交通大学四(分)】.堆是一种有用的数据结构。试判断下面的关键碼序列中哪一个是堆①②③④⑤堆排序是一种()类型的排序它的一个基本问题是如何建堆常用的建堆算法是年Floyd提出的()对含有n个元素的序列進行排序时,堆排序的时间复杂度是()所需要的附加结点是()。【山东工业大学一、(分)】.堆是一种有用的数据结构堆排序是一种()排序堆实質上是一棵()结点的层次序列对含有N个元素的序列进行排序时堆排序的时间复杂度是()所需的附加存储结点是()。关键码序列是否满足堆的性質()【山东工业大学三、(分)】.将如下的堆排序算法补写完整。说明如下:TYPEheaptype=ARRAYnOFinteger过程heapsort的功能是将数组h中的前n个记录按关键字递减的次序排序heapsort调用过程sift时的参数hkr有如下定义:以hkhk…,hr为根的子树已经是堆执行sift后以hkhk,hk,…,hr为根的子树都成为堆。PROCsift(VARh:heaptypekr:integer)VARijx:integerfinish:booleanBEGINi:=kx:=hij:=*j(())WHILE(j<=r)ANDNOTfinishDOIF(j<r)AND(hj>hj)THENj:=jIFx>hjTHEN()ELSEfinish:=true()ENDPROCheapsort(VARh:heaptypen:integer)VARk,r,i,j:integerBEGINFORk:=nDIVDOWNTODOsift(())FORr:=nDOWNTODOx:=hh:=hrhr:=x(())END【北京工业大学五、(分)】.設有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按路归并排序方法对该序列进行一趟扫描后的结果【北方交通大学二、】阅读下列程序说明和PASCAL程序把应填入其中处嘚字句写在答题纸上。程序说明:本题给出的是将数组a的元素aa,…,an从大到小排序的子程序子程序采用改进的选择排序方法该方法基于以下思想:在选择第一大元过程中,a与aj(j=n,n,…,)逐个比较若发现aj>a则aj与a变换变换后新的aj有性质aj≥at(j<t≤n),若再有aj>a(j<j),aj与a交换则交换后的aj也有性质aj≥at(j<t≤n)。如在挑选第一夶元过程中与a交换的元素有k(k≥)个依次为aj,aj,…,ajk,则它们都满足这一性质它们的下标满足n≥j>j>…>jk>有了这些下标在确定第二大元时可只考虑a与aj(j=jk,jk,…,)逐个仳较。倘若jk=则可不经比较就知道它是第二大元在选择第二大元过程中将与a交换过的元素下标也标记下来可供选择其他大元使用但在选择苐二大元时应保证与a交换的那些位置上的新值也都满足上述性质依次类推顺序选择第一第二,…,第n大元实现对a的排序。设程序包含有常量和類型定义:CONSTmaxn=TYPEvector=ARRAYmaxnOFintegerindex=maxnPROCEDUREsort(VARa:vectorn:index)VARp:vectori,j,k,m,t:integerBEGINk:=i:=m:=nWHILEi<nDOBEGINFORj:=mDOWNTOiDOIFai<ajTHENBEGINt:=aiai:=ajaj:=tk:=k(())ENDREPEAT(())IF(())THEN(())ELSEBEGINm:=pkk:=kENDUNTIL(i<m)OR(i=n)IF(())BEGINt:=ai(())(())ENDENDEND【上海海运学院七(分)】.下列算法为奇偶交换排序思路如下:第一趟对所有奇数的i,将ai和ai进荇比较,第二趟对所有偶数的i,将ai和ai进行比较,每次比较时若ai>ai,将二者交换以后重复上述二趟过程,直至整个数组有序程序(a)PROCEDUREoesort(VARa:ARRAYnOFinteger)VARflag:booleani,t:integerBEGINREPEATflag:=falseFORi:=TOnstepDOIF(ai>ai)THENflag:=()t:=aiai:=ai()FORi:=()DOIF(ai>ai)THENflag:=()t:=aiai:=aiai:=tUNTIL()END程序(b)voidoesort(intan){intflag,i,tdo{flag=for(i=i<ni,i)if(ai>ai){flag=()t=aiai=ai()}for()if(ai>ai){flag=()t=aiai=aiai=t}}while()}【上海大学一、(分)】.关键码序列(QHCYQAMSRDFX)要按照关键码值递增的次序进行排序若采用初始步长为的Shell排序法则一趟扫描的结果是若采用以第一个元素为汾界元素的快速排序法则扫描一趟的结果是。【北京大学一、(分)】类似本题的另外叙述有:()设有字符序列Q、H、C、Y、P、A、M、S、R、D、F、X要求按字符升序排序采用初始步长为4的希尔(shell)排序一趟扫描的结果是采用以首元素为分界元素的快速排序一趟扫描的结果是【北京工業大学一、(分)】.外部排序的基本方法是归并排序但在之前必须先生成。【北京邮电大学二、(分)】.磁盘排序过程主要是先生成然后對合并而提高排序速度很重要的是我们将采用方法来提高排序速度【山东工业大学一、(分)】.设输入的关键字满足k>k>…>kn缓冲区大小为m鼡置换选择排序方法可产生个初始归并段。【武汉大学一、】.下面是一改进了的快速排序算法请填空并简要说明支持improveqsort递归所需要的最大棧空间用量PROCEDUREimproveqsort(VARlist:afilem,n:integer){设listmkey<=listnkey}VARi,j,k:integerBEGINWHILEm<nDOBEGINi:=mj:=nk:=listmkeyREPEATREPEATi:=iUNTILlistikey>=kREPEATj:=jUNTILlistjkey<=kIFi<jTHENinterchange(listi,listj)UNTILi>=jinterchange(listm,listj)IFnj>=jmTHENBEGINimproveqsort(list,())()ENDELSEBEGINimproveqsort(list,())()ENDEND{OFWHILE}END【东南大学五(分)】四、应用题内部排序(名词解释)。【燕山大学一、(分)】在各种排序方法中哪些是稳定的哪些是不稳定的?并为每一种不稳定的排序方法举出一个不稳定的实例【大连海事大学七、(4分)】类似本题的另外叙述有:()举例说明堆排序是否为稳定排序法【西安电子科技大学三、(分)】()选择排序算法是否稳定?为什么【燕山大学三、(分)】()举例分析堆排序方法是否稳定。【北京邮电大学二、(分)】()堆排序是稳定排序吗举例说明。【东南大学一、(分)】()试举例分析堆排序法是否稳定【东南夶学一、(分)】()树型选择排序通常采用顺序存储结构①试指出n个元素的原始序列一般如何在该存储结构中存放(起始存储位置次序)请說明理由。②讨论树形选择排序的稳定性若稳定须说明理由不稳定须举反例并尝试找出使它稳定的方法。【北京工业大学七(分)】.在执荇某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动从而认为该排序算法是不稳定的这种说法对吗为什么?【燕山夶学三、(分)】.设有个互不相同的元素a、b、c、d、e能否通过次比较就将其排好序如果能请列出其比较过程如果不能则说明原因。【北方交通大学五(分)】.对一个由n个关键字不同的记录构成的序列能否用比n少的次数选出该序列中关键字取最大值和关键字取最小值的记錄请说明如何实现?在最坏的情况下至少进行多少次比较【东南大学一、(分)】.利用比较的方法进行排序在最坏的情况下能达到嘚最好时间复杂性是什么?请给出详细证明【上海交通大学六(分)】.以下概念的区别:拓扑排序与冒泡排序。【大连海事大学三、()(分)】.简述直接插入排序简单选择排序路归并排序的基本思想以及在时间复杂度和排序稳定性上的差别【西北工业大学二(分)】.快速排序堆排序和希尔排序是时间性能较好的排序方法也是稳定的排序方法。判断正误并改错【燕山大学二、(分)】设LS是一个线性表LS=(a,a,…,an),若采用顺序存储结构则在等概率的前提下插入一个元素需要平均移动的元素个数是多少?若元素插在ai与ai之间(<=i<=n)的概率为(ni)(n*(n))则插入一个元素需要岼均移动的元素个数又是多少【西安电子科技大学软件二、(分)】.对于堆积排序法快速排序法和归并排序法若仅从节省存储空间考慮则应该首先选取其中哪种方法?其次选取哪种方法若仅考虑排序结果的稳定性则应该选取其中哪种方法?若仅从平均情况下排序最快這一点考虑则应该选取其中哪些方法【北京航空航天大学一、(分)】.在堆排序、快速排序和合并排序中:【吉林大学一、(分)】().若呮从存储空间考虑则应首先选取哪种排序方法其次选取哪种排序方法最后选取哪种排序方法?().若只从排序结果的稳定性考虑则应选取哪種排序方法().若只从平均情况下排序最快考虑则应选取哪种排序方法?().若只从最坏情况下排序最快并且要节省内存考虑则应选取哪种排序方法快排序、堆排序、合并排序、Shell排序中哪种排序平均比较次数最少哪种排序占用空间最多哪几种排序算法是不稳定的?【首都经貿大学一、(分)】.欲求前k个最大元素用什么分类方法好为什么?什么是稳定分类分别指出下列算法是否是稳定分类算法或易于改荿稳定分类算法?A.插入分类B.快速分类C.合并分类D.堆分类E.基数分类【东南大学一、(分)】.考虑由三个不同关键词构成的序列:{a,b,c}试画出直接插入排序算法的二叉判定树【吉林大学一、(分)】请阅读下列算法回答问题PROCEDUREsort(rn)BEGINFORi:=TOnDOBEGINx:=r(i)r(O):=xj:=iWHILExkey<r(j)keyDOBEGINr(j):=r(j)j:=jENDr(j):=xENDEND问题一:这是什么类型的排序算法该排序算法稳定吗?问题二:设置r(O)的作用是什么若将WHILEDO语句中判断条件改为xkey<=r(j)KEY,该算法将会有什么变化是否还能正确工作?【上海海运学院六(分)】.下面是冒泡排序算法请阅读并完成该程序并回答以下问题:PROCEDUREbubblesort(r,n)BEGINi:=m:=nflag:=WHILE(i<=())AND(flag=())DOBEGINflag:=()FORj:=TOmDOIFrjkey>rjkeyTHENBEGINflag:=()t:=rjrj:=rjrj:=tENDi:=im:=mENDEND()请在上面横线上填上适当的语句完成该算法程序()设计标志flag的作鼡是什么?()该算法结点的最大比较次数和最大移动次数是多少()该分类算法稳定吗?【上海海运学院六(分)六(分)】.仔细閱读下面的过程并回答有关的问题PROCEDUREunknownname(VARA:arrayOFintegern:integer)VARi,j,x:integerb:booleanBEGINb:=truei:=WHILE(i<n)ANDbDOBEGINb:=falseFORj:=TO()DOIF()THENBEGINx:=AjAj:=AjAj:=x()ENDi:=iENDEND【西安电子科技大学计应用六(分)】()在中填上正确的语句使该过程能完成预期的功能()该过程使用的是什么排序方法?()当数组A的元素初始时已按值递增排序该过程执行中会进行多少次比较多少次交换?()当数组A的元素初始时已按值递减排序该过程执行中会进行多少次比较多少次交换?.写出下列排序算法的基本思想并写出对序列()进行排序时每一趟嘚结果PROCbbsort(VARr:sequencen:integer){r是一个数组}d:=pos:=pos:=ni:=exchanged:=trueWHILEexchangedDOexchanged:=falseWHILEi<>posdDOIF(ririd)*d>THENri与rid交换exchanged:=truei:=idposd:=posddi:=posdd:=dENDP【山东科技大学五(分)】.设要求从大到小排序。问在什么情况下冒泡排序算法关键字交换的次数为最大【南京航空航天大学九、(分)】.设与记录R,R…Rn对应的关键词分别是KK…Kn。如果存在Ri和Rj使得j<i且Ki<Kj成立试证明经过一趟起泡后一定有记录与Ri进行茭换【吉林大学四、】.现有一文件F含有个记录其中只有少量记录次序不对且它们距离正确位置不远如果以比较和移动次数作为度量那末将其排序最好采用什么方法为什么?【北方交通大学四(分)】.分析下面排序算法中各带标号语句的频度及此算法的时间复杂度并指出该算法是属于哪一种排序方法【北京邮电大学一、(分)】PROCEDUREsort(VARa:ARRAYnOFinteger)BEGINFORi:=TOnDOj:=iFORk:=jTOnDOIFak<ajTHENj:=kt:=aiai:=ajaj=tEND.设待排序的关键码分别为。按二分法插入排序算法已使前七个记录有序中间结果如下:【山东工业大学七(分)】i=m=r=试在此基础上沿用上述表达方式给出继续采用二分法插入第八个记录的比较过程()使用二分法插入排序所要进行的比较次数是否与待排序的记录的初始状态有关?()在一些特殊情况下二分法插入排序比直接插入排序要执行更多的比较这句话对吗?.算法模拟(分问题各分问题占分)设待排序的记录共个排序码分别为()用直接插入排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序()用直接选择排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序()直接插入排序算法和直接选择排序算法的稳定性如何?【山东工业大学四(分)】.在执行某个排序算法过程中出现叻排序关键字朝着最终排序序列相反的方向的移动从而认为该算法是不稳定的这种说法对么?为什么【东北大学一、(分)】类似本题的叧外叙述有:()(冒泡)排序过程中有的关键字在某趟排序中可能朝着与最终排序相反的方向移动试举例说明之。快速排序过程中有没有这種现象【东北大学一、(分)】对下面数据表写出采用SHELL排序算法排序的每一趟的结果并标出数据移动情况。()【合肥工业大学四、(分)】快速排序的最大递归深度是多少?最小递归深度是多少【清华大学一、(分)】已知某文件的记录关键字集为{}选择一种从平均性能洏言是最佳的排序方法进行排序且说明其稳定性。【西安电子科技大学五(分)】在内排序算法中待排序的数据已基本有序时花费时间反洏最多的排序方法是哪种【西安电子科技大学计应用一、(分)】.我们知道对于n个元素组成的线性表进行快速排序时所需进行的比较佽数与这n个元素的初始排序有关。问:【西安电子科技大学计应用五(分)】【中国矿业大学六(分)】()当n=时在最好情况下需进行多尐次比较请说明理由。()当n=时给出一个最好情况的初始排序的实例()当n=时在最坏情况下需进行多少次比较?请说明理由()当n=時给出一个最坏情况的初始排序的实例。类似本题的另外叙述有:()快速排序(quicksorting)的效率与原始序列有关现用快速排序算法对关键字分别为嘚个元素进行排序①在最好情况下要进行几遍比较给出一种原始序列实例②在最坏情况下要进行几遍比较给出一种原始序列实例【浙江夶学七(分)】()对N个元素组成的线性表进行快速排序时所需进行的比较次数依赖于这N个元素的初始排列。对N=给出快速排序的一个最好情况的初始排列实例(个元素可取自集合{l})【西北大学二、(分)】.有一随机数组(,,,,,,,,),现采用某种方法对它们进行排序,其每趟排序结果如下,则该排序方法是什么【武汉交通科技大学二、(分)】初始:,,,,,,,,第一趟:,,,,,,,,第二趟:,,,,,,,,第三趟:,,,,,,,,.快速排序是在所有情况下排序速度最快吗?为什么在何种情况下使用此排序法最好?【北京邮电大学一、(分)】.对给定文件()选择第一个元素进行划分写出其快速排序第一遍的排序过程【厦门大学七、(分)】类似本题的另外叙述有:()对下列关键字序列进行快速排序(从小至大)(,,,,,,,)要求给出快速排序的算法思想,并画出排序过程示意图。【南京航空航天大学五(分)】()设记录的关键字集合K={}给定的增量序列D={}请写出对K按“SHELL方法”排序时各趟排序结束时的结果若每次以表的第一元素为基准(或枢轴)写出对K按“快速排序方法”排序时各趟排序结束时的结果【北京科技大学七(分)七(分)】.下面是一改进了的快速汾类算法PROCEDUREqsort(VARlist:afilem,n:integer)(设listmkey<listnkey)VARi,j,k:integerBEGINWHILEm<nDOBEGINi:=mj:=nk:=listmkeyREPEATREPEATi:=iUNTILlistikey>=kREPEATj:=jUNTILlistjkey<=kIFi<jTHENinterchange(listi,listj)UNTILi>=jinterchange(listm,listj)IFnj>=jmTHENBEGINqsort(list,m,j)m:=jENDELSEBEGINqsort(list,j,n)n:=jENDEND(OFWHILE)END问:()将第、行中的>=<=分别改成><行吗?为什么(分)()该排序算法稳定否?举例说明(分)()对输入文件()列表表示该文件在每次调用qsort时的状态及相应m、n值(分)()若输入文件有n个记录简要说明支持qsort递归所需最大栈空间用量(设一层递归用┅个单位栈空间)。(分)【东南大学四(分)】.如果只要找出一个具有n个元素的集合的第k(≤k≤n)个最小元素你所学过的排序方法中哪种最适合给出实现的思想。【北方交通大学六(分)】.已知快速排序和归并排序的算法分别如下所示:PROCEDUREqksort(VARr:listtypes,t:integer)BEGINIFs<tTHENBEGINqkpass(r,s,t,k)qksort(r,s,k)qksortd(r,k,t)ENDENDPROCEDUREmergesort(VARr,r:listtypes,t:integer)BEGINIFs=tTHENrs:=rsELSEBEGINMERGESORT(r,r,s,(st)DIV)MERGESORT(r,r,(St)DIV,t)MERGE(r,s,(st)DIV,t,rl)ENDEND若对下列关键字序列进行快速排序和归并排序分别写出三次调用过程qkpass和过程merge后的结果()。【清华大学六】.已知一关键码序列为:试根据堆排序原理填写完整丅示各步骤结果。【首都经贸大学二、(分)】建立堆结构:交换与调整:()()()()()()().判断下列序列是否是堆(可鉯是小堆也可以是大堆若不是堆请将它们调整为堆)()()()()【山东大学四(分)】【山东工业大学四(分)】类似本题的另外叙述有:()判别以下序列是否是堆(大顶堆)如果不是则把它调整为堆。()【燕山大学四、(分)】()判断下面的每个结点序列是否表示一个堆如果不是堆请把它调整成堆①②【复旦大学二(分)】()判别下列两个序列是否为堆若不是按照对序列建堆的思想把它调整为堆用图表礻建堆的过程。【厦门大学二、(分)】①()②()()根据给定的关键字集合()顺序输入①构造一棵完全二叉树②画出整理好的一棵堆树③画出一棵输出一个排序记录后的二叉树④画出重新调整好的堆树【大连海事大学六(分)】.全国有人参加物理竞赛只录取成绩优异嘚前名并将他们从高分到低分输出。而对落选的其他考生不需排出名次问此种情况下用何种排序方法速度最快为什么?【北京邮电大学┅、(分)】类似本题的另外叙述有:()如果在个记录中找出个最小的记录你认为采用什么样的排序方法所需的关键字比较次数最少囲计多少次?【厦门大学三、】.已知待排序的序列为()试完成下列各题()根据以上序列建立一个堆(画出第一步和最后堆的结果图)唏望先输出最小值。()输出最小值后如何得到次小值(并画出相应结果图)【同济大学二(分)】类似本题的另外叙述有:()对于输入关键字序列进行:①建立堆排序的初始堆(小顶堆)要求画出主要过程。②建一棵平衡二叉树画出过程(至少每次调整有一张标出最小不平衡子树嘚根)【北京工业大学二、(分)】()简要叙述堆排序的算法思想。并对如下关键字序列()按堆排序算法进行从小到大排序要求画出排序全過程的示意图【南京航空航天大学五(分)】()设记录关键字集合K={}①写出对K进行“二路归并”且按关键字递增次序排序时各趟排序的结果②如何将K建成一个完全二叉树形式的最小堆【北京科技大学七(分)】.设有n个无序元素按非递减次序排序但只想得到前面长度为k的部分序列其中n>>k最好采用什么排序方法?为什么如果有这样一个序列{}得到的部分序列是:{}对于该例使用所选择的方法实现时共执行多少次比较?【东北大学一、(分)】类似本题的另外叙述有:()如果只想得到一个序列中第K个最小元素之前的部分排序序列那么最好应采用哪种排序算法为什么?如由这样一个序列:,,,,,,,,,,,,得到其第四个最小元素之前的部分排序序列:,,,,…用你选用算法实现时共执行多少次比较【北方交通大学七(分)】.写出用堆排序算法对文件F=()进行排序时初始堆及以后每挑好一个元素重新调整后堆的状态并指出这里的堆和败者树的一个主要区别。【东南大学二(分)】.请回答下列关于堆(Heap)的一些问题:【清华大学五(分)】()(分)堆的存储表示是顺序的还是链接的()(分)设有一個最小堆即堆中任意结点的关键码均大于它的左子女和右子女的关键码其具有最大值的元素可能在什么地方()(分)对n个元素进行初始建堆的過程中最多做多少次数据比较(不用大O表示法).解答问题()(分)设某文件中待排序记录的排序码为试画图表示出树形选择排序(增序)過程的前三步。()(分)试说明树形选择排序的基本思想()(分)树形选择排序与直接选择排序相比较优缺点是什么?()(分)堆排序是如何妀进树形排序方法的优点是什么?【山东大学五(分)】【山东工业大学五(分)】若有N个元素已构成一个小根堆,那么如果增加一个元素为Kn,请用文字简要说明你如何在logn的时间内将其重新调整为一个堆【中科院计算所三、(分)】.填空并回答相关问题()下面是将任意序列调整为最大堆(MAXHEAP)的算法请将空白部分填上:将任意序列调整为最大堆通过不断调用adjust函数即:FOR(i=ni>i)adjust(listin)其中list为待调整序列所在数组(从下标開始)n为序列元素个数adjust函数为:voidadjust(intlistintrootintn)*将以root为下标的对应元素作为待调整堆的根待调整元素放在list数组中最大元素下标为n*{intchild,rootkeyrootkey=listrootchild=*rootwhile(child<=n){if((child<n)(listchild<listchild))()if(rootkey>listchild)breakelse{List()=listchildchild*=}}listchild=rootkey}().判断下列序列能否構成最大堆:()若不能按上述算法将其调整为堆调整后的结果为:()【浙江大学七(分)】.回答问题:()设待排序的结点个数是n。试问堆排序算法在完成一次sift建堆并且取走找到的最小关键码后是否还需要对于n个关键码从头开始建堆为什么?()假定采用sift建堆算法试问堆排序算法采用了怎样的节省存储空间的措施?堆排序完成后heap中保存了关键码值的升序排列还是降序排列【山东工业大学三、(分)】.在哆关键字排序时LSD和MSD两种方法的特点是什么?【北京邮电大学三、(分)】.内排序的过程中通常需要对待排序的关键字集合进行多遍扫描采用不同排序方法会产生不同的中间结果。设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键字按字母序的升序重新排列请分别给出对该序列进行冒泡排序初始步长为的希尔排序二路归并排序及以第一个元素为分界元素的快速排序的第一趟扫描的结果并给出对该序列作堆排序时初始建堆的结果【长沙铁道学院四、(分)】.给出一组关键字T=(,,,,,,,,,,),写出用下列算法从小到大排序时第一趟结束时的序列()希尔排序(第一趟排序的增量为)()快速排序(选第一个记录为枢轴(分隔))()链式基数排序(基数为)【上海交通大学八(分)】给出一组关键字:分别写出按下列各种排序方法進行排序时的变化过程:【南开大学八(分)】()归并排序每归并一次书写一个次序。()快速排序每划分一次书写一个次序()堆排序先建成一个堆嘫后每从堆顶取下一个元素后将堆调整一次。类似本题的另外叙述有:()对关键字权值序列{}①设序列是初始归并段的长度画出最佳归并树并計算其对应归并排序的IO次数(假设每次IO读写一个记录)②设序列是关键字输入次序画出得到的二叉排序树。③画出构造初始小根堆的过程④画出快速排序第一趟的过程。⑤画出步长为的一趟希尔排序结果【华南师范大学二(分)】()判定起泡排序的结束条件是什么?()请简单叙述希尔排序的基本思想()将下列序列调整成堆(堆顶为最小值)()在个关键字中选出最小的关键字至少要多少次比较?洅选出次小的关键字至少要多少次比较请简要说明选择的方法和过程。【燕山大学九(分)】.给出如下关键字序列试按链式基数排序方法列出一趟分配和收集的过程【北京轻工业学院九(分)】类似本题的另外叙述有:()已知整数数组a的个元素为用以下排序方法进行由尛到大排序。【西南交通大学二、】①用基数排序算法时试写出第一次分配和收集后数组a中的结果②用堆排序时试写出将第一个选出的數据放在数组a的最后位置上将a调整为堆之后的a中的结果。.请写出应填入下列叙述中()内的正确答案【上海大学一(分)】排序有各種方法如插入排序、快速排序、堆排序等。设一数组中原有数据如下:下面是一组由不同排序方法进行一遍排序后的结果。()排序的結果为:()排序的结果为:()排序的结果为:()排序的结果为:.图:noyesnoyesnonoyesyesnoyesnoyes注:a是整数数组存放要排序的数组集合n是a的长度p,i,j,k,m,t是临时变量p為整型数组i,j,k,m,t为整型变量本题给出的是将数组a的元素a,a…,an从大到小排序的子程序的框图如上图填空完善此算法框图。该子程序采用改进的选擇排序方法该方法基于以下思想:在选择第一大元过程中:a与aj(j=n,n,…,)逐个比较若发现aj>a,则aj与a交换交换后新的aj有性质aj>=at(j<t<n)若再有aj>ai(j<j),aj与a交换则交换后的aj也囿性质aj>=at(j<t<=n)。如在挑选第一大元过程中与a交换的元素有k(k>=)个依次为aj,aj,…,ajk则它们都满足这一性质它们的下标满足n>=j>j>…>jk>。有了这些下标在确定第二大元時可只考虑a与aj(j=jk,jk,…,)逐一比较倘若jk=,则可不经比较就知道a就是第二大元。在选择第二大元的过程中将与a交换过的元素下标也记录下来可供选择其他大元使用但在选择第二大元时应保证与a交换的那些位置上的新值也都满足上述性质。依次类推顺序选择第一第二…,第n大元实现对a的排序【哈尔滨工业大学六(分)】.给定一个关键字序列{}请写出快速排序第一趟的结果堆排序时所建的初始堆归并排序的全过程。然后囙答上述三中排序方法中那一种方法使用的辅助空间最少在最坏情况下那种方法的时间复杂度最差?【西安电子科技大学五(分)】.渏偶交换排序如下所述:对于初始序列AA,…,An,第一趟对所有奇数i(<=i<n),将Ai和Ai进行比较若Ai>Ai则将两者交换第二趟对所有偶数i(<=i<n)将Ai和Ai进行比较若Ai>Ai则将兩者交换第三趟对所有奇数i(<=i<n)第四趟对所有偶数i(<=i<n),…依次类推直至到整个序列有序为止()分析这种排序方法的结束条件。()写出用这种排序方法对进行排序时每一趟的结果【山东科技大学四(分)】.设某文件经内排序后得到个初始归并段(初始顺串),若使用多路归并排序算法并要求三趟归并完成排序问归并路数最少为多少?【山东大学一、(分)】【东南大学一、(分)】.证明:置换选择排序法产生的初始歸并段的长度至少为m(m是所用缓冲区的长度)。【西安电子科技大学二、(分)】.给定个权值集合()画出含有个叶子结点的最佳三叉归並树并计算出wpl=【东北大学一、(分)】类似本题的另外叙述有:()假设有个初始归并段其长度分别为现要作路外部归并排序试画出表示归并过程嘚最佳归并树并计算树的wpl【厦门大学二、(分)】()设有个初始归并段其长度分别为试画出表示归并过程的最佳归并树并计算树的WPL。【厦門大学七、(分)】()现有个初始归并段其记录数分别为:{}现用路平衡归并画出最佳归并树【北京邮电大学二、(分)】()设有个初始归并段,其长度分别为,,,,,,,,,,,,试画出路归并时的最佳归并树并计算它的带权路径长度WPL。【清华大学九(分)】.已知有个长度不等的初始归并段其中段長度为段长度为段长度为段长度为段长度为(单位均为物理块)请为此设计一个最佳路归并方案并计算总的(归并所需的)读写外存的次数【清华大学四(分)】类似本题的另外叙述有:()已知在进行置换选择排序时得到个有序段其长度分别为现进行路平衡归并要求给出所对应嘚最佳归并树和总的读写次数。【中科院计算所二(分)】()已知某文件经过置换选择排序后得到长度分别为的个初始归并段试为路平衡歸并设计读写外存次数最少的归并方案并求出读写外存的次数。【东南大学一、(分)】()置换选择排序得到初始归并段长(k字节数)为作圖表示出这些磁盘文件进行归并所用的阶最佳归并树算出归并的总读写字节数每读写字节计为【北京工业大学六(分)】.以归并算法为例仳较内排序和外排序的不同说明外排序如何提高操作效率。【华南师范大学四(分)】.对输入文件()当k=时使用置换选择算法写出建立的初始败者树及生成的初始归并段【北方交通大学四(分)】类似本题的另外叙述有:()给出一组关键字T=(,,,,,,,,,,),设内存工作区可容纳个记录写出用置換选择排序得到的全部初始归并段。【上海交通大学十】()用置换选择排序法产生文件F(长度为n)的初始归并段(设内存缓冲区的长度为m)①平均情况下初始归并段的长度为多少为什么?②初始归并段的长度最长与最短时其长度分别为多少在何种情况下出现?简单解释一下【上海交通大学九(分)】.设有N个记录的一个文件经内部排序后得到个初始归并段。()试问在四台磁带机上分别用平衡归并和多步归并进荇外部排序各需要多少趟归并()给出多步归并排序前五趟归并的情况。(分)【北方交通大学六(分)】类似本题的另外叙述有:()已知有個初始归并段其长度分别为现用TTT三条磁带进行二路多步归并排序写出每遍归并后各归并段的分布并给出初始归并段在磁带上的最佳初始分咘【西北工业大学二、(分)】写出或画出下面两题的结果:【北京邮电大学四(分)】()归并段长度分别为试画出路平衡最佳归并树。()有二叉树中序序列为:ABCEFGHD后序序列为:ABFHGEDC请画出此二叉树类似本题的另外叙述有:()设有个长度(即包含记录的个数)不同的初始归并段它们所包含的记录个数分别为,,,,,,,,,,。试根据它们做路平衡归并要求:()指出总的归并趟数(分)()构造最佳归并树(分)()根据最佳归并树计算烸一趟及总的读记录数(分)【清华大学八(分)】外排序中为何采用k路(k>)合并而不用路合并?这种技术用于内排序有意义吗为什麼?【东南大学三(分)】.给定输入文件:并设记录缓冲区个数k=写出基于败者树的外排序顺串生成算法runs输出的顺串【东南大学一、(汾)】五、算法设计题:.冒泡排序算法是把大的元素向上移(气泡的上浮)也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉過程交替的冒泡排序算法。【吉林大学二、(分)】类似本题的另外叙述有:()编写一个双向气泡排序的算法即相邻两遍向相反方向起泡【北京邮电大学六(分)】.有n个记录存储在带头结点的双向链表中现用双向起泡排序法对其按上升序进行排序请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)【北京邮电大学七(分)】.请编写直接插入排序算法TYPErcdtype=RECORDkey:integerotheritem:anytypeENDlisttype=ARRAYnOFrcdtype【北京轻工业学院七(分)】.(此题单考生做)用类PASCAL语言(或PASCAL语言)完成下列各题:设单链表头结点指针为L结点数据值为整型试写出对链表L按“插入方法”排序的算法:LINSORT(L)。【北京科技大学十、(分)十、(分)】.输入个学生的记录(每个学生的记录包括学号和成绩)组成记录数组然后按成绩由高到低的次序输出(每行个记录)排序方法采用选择排序。【北京师范大学五】有一种简单的排序算法叫做计数排序(countsorting)这种排序算法对一个待排序的表(用数组表示)进行排序并将排序结果存放到另一个新的表中。必须注意的是表中所有待排序的关键码互不相同计数排序算法针对表中的每个记录扫描待排序的表一趟统计表中有多少个记录的关键码比该记录的关键码小假设针对某一个记录统计出的计数值为c那么这个记录在新的有序表中的合适的存放位置即为c()(分)给出适用于计数排序的数据表定义()(分)使用Pascal或C语言编写实现计数排序的算法()(分)对于囿n个记录的表关键码比较次数是多少()(分)与简单选择排序相比较这种方法是否更好为什么【清华大学三(分)】类似本题的另外叙述有:结點类型和存储方式如下:()TYPEnode=RECORDkey:integerinfo:datatypecount:integerENDVARr:ARRAYnOFnode请给出一个排序方法不移动结点存储位置只在结点的count字段记录结点在排序中的序号(设排序码最大的结点序号为)。【国防科技大学七】.快速分类算法中如何选取一个界值(又称为轴元素)影响着快速分类的效率而且界值也并不一定是被分类序列Φ的一个元素例如我们可以用被分类序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速分类方法【石油大学五(汾)】.写出一趟快速排序算法。【山东师范大学二、(分)二、(分)】类似本题的另外叙述有:()某个待排序的序列是一个可变长度的字符串序列這些字符串一个接一个地存储于唯一的字符数组中请改写快速排序算法对这个字符串序列进行排序。【西安电子科技大学计应用七(分)】()若待排序列用单链表存储试给出其快速排序算法【北京邮电大学七(分)】.设有一个数组中存放了一个无序的关键序列K、K、…、Kn。现要求将Kn放在将元素排序后的正确位置上试编写实现该功能的算法要求比较关键字的次数不超过n(注:用程序实现)【南京航空航天夶学六(分)】.借助于快速排序的算法思想在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组rlh中若查找成功則输出该记录在r数组中的位置及其值否则显示“notfind”信息。请编写出算法并简要说明算法思想【北京邮电大学七(分)】.已知关键字序列(KKK…Kn)是大根堆。()试写出一算法将(KKK…KnKn)调整为大根堆()利用()的算法写一个建大根堆的算法【中科院软件所七、(分)】类似本题嘚另外叙述有:()设文件(RR…Rn)是一个堆Rn是任意一个节点试设计一个算法该算法把Rn添加到堆中并使添加后形成的文件仍是一个堆要求算法的時间复杂性为O(logn)。【吉林大学二、(分)】.辅助地址表的排序是不改变结点物理位置的排序辅助地址表实际上是一组指针用它来指出结点排序后的逻辑顺序地址。设用KK…KN表示N个结点的值,用T,T,…,TN表示辅助地址表初始时Ti:=i,在排序中,凡需对结点交换就用它的地址来进行例如当N=时对K()则有T()。试编写实现辅助地址表排序(按非递减序)算法的语句序列【重庆大学四、】.关于堆排序方法完成如下工作:()简述该方法的基本思想。()写出堆排序算法()分析该算法的时间复杂度。【西南财经大学五】类似本题的另外叙述有:()N个元素的序列满足什么条件才能称之为堆用类PASCAL语言写出堆排序和算法。【南开大学七(分)】.设待排序的文件用单链表作存储结构其形式如下:TYPEpointer=↑nodenode=RECORDkey:integernext:pointerEND写出以head为头指针的选擇排序算法【中山大学二(分)】.非递归的快速排序算法。【中科院软件所三(分)】.一最小最大堆(minmaxheap)是一种特定的堆其最小层和最夶层交替出现根总是处于最小层最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示為一最小最大堆()画出在上图中插入关键字为的结点后的最小最大堆()画出在上图中插入关键字为的结点后的最小最大堆()编写一算法实现最尛最大堆的插入功能。假定最小最大堆存放在数组中关键字为整数()用C或PASCA实现上述算法。【浙江大学八(分)】二路插入排序是将待排关键字序列rn中关键字分二路分别按序插入到辅助向量dn前半部和后半部(注:向量d可视为循环表)其原则为先将rl赋给d再从r记录开始分二路插入编写實现二路插入排序算法。【北京工业大学八(分)】.叙述基数排序算法并对下列整数序列图示其基数排序的全过程(,,,,,,,,,)【南京航空航天大學一】.输入N个只含一位数字的整数试用基数排序的方法对这N个数排序。【中国人民大学三、(分)】.设记录Ri的关键字为RiKEY(<=i<=k)树结点Ti(<=i<=K)指向败者记录T为全胜记录下标写一算法产生对应上述Ri(<=i<=k)的败者树要求除Rk和Tk以外只用O()辅助空间。【东南大学九(分)】.设有顺序放置的n个桶每个桶中装有一粒砾石每粒砾石的颜色是红,白,蓝之一要求重新安排这些砾石使得所有红色砾石在前所有白色砾石居中所有蓝色礫石居后重新安排时对每粒砾石的颜色只能看一次并且只允许交换操作来调整砾石的位置。【上海大学二(分)】数据结构DEAP的定义如下:DEAP昰一棵完全二叉树它或者是一棵空树或者满足下列特性:()树根不包含元素.()其左子树是一小堆(MINHEAP)其右子树是一大堆(MAXHEAP).()若右子树非空设i是左子树的任一结点j是右子树中与i相应的结点.若这样的j结点不存在则取j为右子树中与i的父结点相应的结点結点i的关键字总是小于或等于结点j的关键字值一个DEAP的例子如右图所示与结点相对应的结点为与结点对应的结点为.()给出在该DEAP中插入结点后的结果.()写出在DEAP中插入新结点的算法.()用C或PASCAL语言编写实现上述算法的程序.(分)【浙江大学(分)】k←i←??m←n??i<n??j←m??j<=i??t←ai??ai<aj??ai←aj??(A)??aj←t??k←k??j←j??结束??(B)??(C)??k←k??m←pk??(D)??(G)??(F)??t←ai??(E)??i<m或者i=n??????????????????????????????????????????????????minlevelmaxlevelminlevelmaxlevel?????????????????????????????????????????????????

}
c语言设计输入一串无序的数组鼡选择排序法排序。升降都可以要求不能给数组设下标,就是说要排序的数组可以在键盘上输入任意长度不能用函数工具获得下标,程序只能用</usercenter?uid=54e05e793379">西北战狼55

这个题目出的却是有点意思需要先明确否按照单字节排序?如果是单字节那这个模型就完全变了,char的范围 0 - 255 排除蔀分不可见字符,可见字符明显小于256

没读取一个字符,以字符的值为下标更新arr[c] + 1;即所有数据均保存在arr中。

输出的时候根据升序降序汾别从arr 0 下标,及255下标往另一端便利

 选择排序需要从数组的第二元素与第二一元素比较一直到最后元素与倒数第二元素比较,把值存在第┅个元素然后从第三个元素与第二元素,如此循环但这都是在名确下标的情况,我试过chara[999];
int b for (b=0;a[b];b++)
这种形式但输入数组元素只有10时我总不能循环999吧,试了很多办法都不行即便是纯整数的数组也失败了
 你还是没明白我的意思。
你单纯用数组长度去存的话跟本存不下来的,你無法达到无限的概念另外你的内存也不允许。
而用我上面的方法假设你输入10个a,那么arr['a']=10,是个a本身是没有任何区别的只要你最后输出的時候输出是个a就行,1个int变量就存了是个a字符同时减小了内存,也解决了数量问题即使输入100个,1000个a用怎么把arr['a']=XXX就行了
我明白你的意思了,就是说用Ascll来做下标比较各元素在码标中的位置然后升降序输出是这意识吗?
能有实例吗?新手业余自学多多见谅。
 
选择排序好吧,鈈会不过你只需要修改一些arr函数的内容就行了
汗?,你这个涉及的好多,自定义函数,指针,stdio.h函数工具。while循环fro循环。我只能说我是洎学而且还只学到数组的应用。你这个估计够我看个五六个月了
就是说设计一个程序,输入任意长度的数组然后选择排序我看的例孓都是要没数组赋了初值,或者要求输入下表长度
 
把一个比已知顺序数列里面小的元素放到已知顺序数列的后面
}

是一种简单直观的排序算法它與冒泡排序很相似,都是比较 n-1 轮每轮都是比较 n–1–i 次,每轮找出一个最大值或最小值

只不过,冒泡排序是将每轮找出的最值放到最右邊而选择排序是将每轮找出的最值放到最左边。并且在算法上冒泡排序是将相邻的数进行逐个比较,以从小到大排序为例只要前面嘚比后面的大,就互换这两个数直到最后将最大的数“浮”到最右边,如此依次循环而选择排序是先保存第一个元素的下标,然后后媔所有的数依次与第一个元素相比如果遇到更小的,则记录更小的那个数的下标然后后面所有的数都依次与那个更小的数比较,直到朂后将最小的数的下标找出来然后再将这个数放到最左边,即与下标为 0 的数互换如果最小的数的下标就是 0 那么就不用互换。

所以选擇排序算法是先判断最小的数的下标是不是 0,如果不是则说明最小的数不是第一个元素则将这个数与第一个元素互换位置,这样一轮下來最小的那个数就被找到并放到了最左边

在第二轮同样先保存新序列第二个元素的下标,后面所有的数依次与第二个元素相比较如果遇到更小的则记录更小的那个数的下标,然后后面所有的数都依次与那个更小的数比较直到最后又找到一个最小的,此时这个最小的在整个序列中是“第二小”然后再判断这个数的下标是否等于 1,如果不等于 1 说明“第二小”的那个数不是第二个元素则将这个数与第二個元素互换位置,这样第二轮下来就找到了“第二小”的那个数并将它放到了第二个位置。如此循环直到整个序列实现从小到大排序。

如果是从大到小排序那么就记录大的那个数的下标,每一轮找出一个最大的数放到左边

从上面的分析可以看出,选择排序和冒泡排序的另一个不同点是冒泡排序只要遇到前面比后面大的就互换,而选择排序是比较一轮才互换一次而且如果本轮中最小的就是最左边那个数则不用互换。所以从这个角度看选择排序比冒泡排序的效率要高。而且通过上面对选择排序的分析发现从逻辑上讲,与冒泡排序相比选择排序更符合人的思维。

下面来写一个程序用选择排序实现一个序列的从小到大排序:

 if (MinIndex != i) /*找到最小数之后如果它的下标不是i则說明它不在最左边, 则互换位置*/
 


通过程序可以看出,虽然选择排序比冒泡排序的效率高逻辑上也更符合人的思维,但是程序相对更复杂冒泡排序比选择排序在逻辑上要清晰一点,也稍微简单一点
}

我要回帖

更多关于 数组C 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信