欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    各种排序方法总结.docx

    • 资源ID:14884978       资源大小:24.65KB        全文页数:26页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    各种排序方法总结.docx

    1、各种排序方法总结常用排序算法有哪些?冒择路希快归堆(口诀):冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序,堆排序;冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。JAVA12345678910111213141516171819publicclassBubbleSortpublicvoidsort(inta)intte

    2、mp=0;for(inti=a.length-1;i0;-i)for(intj=0;ji;+j)if(aj+10)for(j=0;jarrj+1)tempExchangVal=arrj;arrj=arrj+1;arrj+1=tempExchangVal;i-;returnarr;vararr=3,2,4,9,1,5,7,6,8;vararrSorted=bubbleSort(arr);console.log(arrSorted);alert(arrSorted);控制台将输出:1, 2, 3, 4, 5, 6, 7, 8, 9快速排序算法快速排序(Quicksort)是对冒泡排序的一种改进。快

    3、速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。Java12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485

    4、8687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127classQuickpublicvoidsort(intarr,intlow,inthigh)intl=low;inth=high;intpovit=arrlow;while(lh)while(l=povit)h-;if(lh)inttemp=arrh;arrh=arrl;arrl=temp;l+;while(lh&arrl=povit)l+;if(llow)sort(ar

    5、r,low,l-1);if(hhigh)sort(arr,l+1,high);/*/方式二/*/更高效点的代码:publicTextendsComparableTquickSort(TtargetArr,intstart,intend)inti=start+1,j=end;Tkey=targetArrstart;SortUtilsUtil=newSortUtil();if(start=end)return(targetArr);/*从i+和j-两个方向搜索不满足条件的值并交换*条件为:i+方向小于key,j-方向大于key*/while(true)while(targetApareTo(key

    6、)0)j-;while(targetApareTo(key)0&i=j)break;sUtil.swap(targetArr,i,j);if(targetArri=key)j-;elsei+;/*关键数据放到中间*/sUtil.swap(targetArr,start,j);if(starti-1)this.quickSort(targetArr,start,i-1);if(j+1end)this.quickSort(targetArr,j+1,end);returntargetArr;/*/方式三:减少交换次数,提高效率/*/privateTextendsComparablevoidquic

    7、kSort(TtargetArr,intstart,intend)inti=start,j=end;Tkey=targetArrstart;while(ii&targetApareTo(key)=0)j-;if(ij)/*targetArri已经保存在key中,可将后面的数填入*/targetArri=targetArrj;i+;/*按i+方向遍历目标数组,直到比key大的值为止*/while(ij&targetApareTo(key)=0)/*此处一定要小于等于零,假设数组之内有一亿个1,0交替出现的话,而key的值又恰巧是1的话,那么这个小于等于的作用就会使下面的if语句少执行一亿次。*/

    8、i+;if(i1)while(noniusj)for(;noniusj;j-)if(arrayjflag)arraynonius+=arrayj;/ai=aj;i+=1;break;for(;noniusflag)arrayj-=arraynonius;break;arraynonius=flag;sort(0,nonius);sort(nonius+1,numsize);sort(0,array.length);returnarray;选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起

    9、始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(比如序列5, 5, 3第一次就将第一个5与3交换,导致第一个5挪动到第二个5后面)。Java1234567891011121314151617181920212223242526publicstaticvoidselectSort(inta)intminIndex=0;inttemp=0;if(a=null)|(a.length=0)return;for(inti=0;ia.length-1;i+)minIndex=i;/无序区的最小数据数组下标for(intj=i+1;ja.length;j+)/在无序区中找到最小数据并保存其

    10、数组下标if(ajaminIndex)minIndex=j;if(minIndex!=i)/如果不是无序区的最小值位置不是默认的第一个数据,则交换之。temp=ai;ai=aminIndex;aminIndex=temp;插入排序有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的

    11、所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。Java版本123456789101112131415161718192021222324/*插入排序*paramarr*return*/privatestaticintinsertSort(intarr)if(arr=null|arr.length2)returnarr;for(inti=1;i0;

    12、j-)if(arrjarrj-1)/TODO:inttemp=arrj;arrj=arrj-1;arrj-1=temp;else/接下来是无用功break;returnarr;希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DLShell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。JAVA1234567891011121314151617181920

    13、21222324252627282930313233343536373839404142434445464748495051525354555657publicstaticvoidmain(Stringargs)inta=49,38,65,97,76,13,27,49,78,34,12,64,1;System.out.println(排序之前:);for(inti=0;ia.length;i+)System.out.print(ai+);/希尔排序intd=a.length;while(true)d=d/2;for(intx=0;xd;x+)for(inti=x+d;i=0&ajtemp;j=

    14、j-d)aj+d=aj;aj+d=temp;if(d=1)break;System.out.println();System.out.println(排序之后:);for(inti=0;ia.length;i+)System.out.print(ai+);上面写的看的人头晕我写个好理解的while(true)for(inti=0;id;i+)for(intj=i;j+daj+d)temp=aj;aj=aj+d;aj+d=temp;if(d=1)break;d-;javascript123456789101112vararr=49,38,65,97,76,13,27,49,55,04,len=a

    15、rr.length;for(varfraction=Math.floor(len/2);fraction0;fraction=Math.floor(fraction/2)for(vari=fraction;i=0&arrjarrfraction+j;j-=fraction)vartemp=arrj;arrj=arrfraction+j;arrfraction+j=temp;console.log(arr);归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子

    16、序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较ai和aj的大小,若aiaj,则将第一个有序表中的元素ai复制到rk中,并令i和k分别加上1;否则将第二个有序表中的元素aj复制到rk中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间s,t以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间s,t。Java语言123456789101112131415161718192021

    17、222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081packagealgorithm;publicclassMergeSort/privatestaticlongsum=0;/*二路归并*原理:将两个有序表合并和一个有序表*parama*params*第一个有序表的起始下标*paramm*第二个有序表的起始下标*paramt*第二个有序表的结束小标*/privatestaticvoidmerge(inta,i

    18、nts,intm,intt)inttmp=newintt-s+1;inti=s,j=m,k=0;while(im&j=t)if(ai=aj)tmpk=ai;k+;i+;elsetmpk=aj;j+;k+;while(im)tmpk=ai;i+;k+;while(j=t)tmpk=aj;j+;k+;System.arraycopy(tmp,0,a,s,tmp.length);/*parama*params*paramlen*每次归并的有序集合的长度*/publicstaticvoidmergeSort(inta,ints,intlen)intsize=a.length;intmid=size/(len1);intc=size&(len1)-1);/-归并到只剩一个有序集合的时候结束算法-/if(mid=0)return;/-进行一趟归并排序-/for(inti=


    注意事项

    本文(各种排序方法总结.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开