首页 > 编程知识 正文

快排的几种优化方案区别,快排整站优化

时间:2023-05-06 10:06:13 阅读:158929 作者:4655

首先,复习一下寻找标准的方法吧。

publicstaticintpartion (int [ ] arr,int start,int end ) { int tmp=arr[start]; while(startend ) while(arr[end]=tmpstartend ) { --end; (if ) start=end ) { break; }else { arr[start]=arr[end]; }while({ startendarr[start]=tmp ) start; (if ) start=end ) { break; }else { arr[end]=arr[start]; } } arr[start]=tmp; 返回开始; }所有后续优化程序都将使用此方法查找基准。

一、聚集相同元素法相同元素集合排序是一种快速排序优化方案,通过在搜索一次基准后,将数据中与基准相同的数据集中到基准的左右两侧,递归地进行多次基准搜索过程

请看下面的步骤。

publicclassfocusalikequicksort {/* *相同元素*/public static int [ ] focus num (int [ ] arr,int start,int end,int par ) ) int //查找并收集与标准左侧的标准相同的元素for (inti=par-1; i=start; I--}{if(arr[I]==arr[par] ) if ) I!=parleft(//按顺序遍历并比较,如果相同,则返回位置int tmp=arr[parLeft]; arr[parLeft]=arr[i]; arr[i]=tmp; parLeft--; }else { parLeft--; }//查找并收集标准右边与标准相同的元素for (intj=par 1; j=end; j () if ) arr[j]==arr[par] ) if(j!=parright(//按顺序遍历并比较,如果相同,则位置int tmp=arr[parRight]; arr[parRight]=arr[j]; arr[j]=tmp; parRight; }else { parRight; }//将收集相同元素后的无秩序数据作为数组返回的边界int[] array=new int[2]; array[0]=parLeft; array[1]=parRight; 返回阵列; } publicstaticvoidquicksort (int [ ] arr,int start,int end ) intpar=partion(arr,start,end ); //相同的元素int[]array=focusnum(ARR,start,end,par ); int left=array[0]; int right=array[1]; if(parstart1) quicksort(ARR,start,left ); (if ) parend-1 ) quick sort (arr,right,end ); }}执行过程如下。

二、随机抽取标准法随机抽取标准法是快速排序的另一种优化方案,是一种产生随机数的方法,通过从数据中随机选择一个数据来寻找标准,子方法比较快速有效,有一定的提高。

看程序:

publicclassrandomquicksort { publicstaticvoidswap [ int [ ] arr,int start,intend]{inttmp=arr[start]; arr[start]=arr[end]; arr[end]=tmp; } publicstaticvoidquicksort (int [ ] arr,int start,int end ) [start,end]之间出现的随机数Random rand=new Random ); int randnum=rand.nextint (end-start1) start; ///将随机数交换到start位置swap(ARR,start,randNum )的intpar=partion(arr,start,end ); if(parstart1)快速启动(arr,start,par - 1 ); (if ) parend-1 ) quicksort ) arr,par 1,end ); (三、三分基准法该方法也是快速排序的优化方案,考虑将数据中的start、end与两者中间位置的数据大小进行比较,进行在这三个值中位于中间位置的值顶上查找基准的操作,该方法也比较快捷高效

看节目单:

publicclassthirdpartitionquicksort {/* *更换方法*/publicstaticvoidswap (int [ ] arr,int start,int end ) inttmp=ARR ) Starr arr[end]=tmp; (/**比较结束后,开始值、中间值和结束值有规律(/publicstaticvoidselectpivotmedianofthree (intarr [ ],int low,int high ) intmid=low ) ) //确认中间值小于尾值if(arr[mid]arr[high] ) (swap ) arr、mid、high ); //确认开始值小于结束值if (arr [ low ] arr [ high ] ) swap ) arr、low、high; //确认开始值大于中间值if(arr[mid]arr[low] ) (swap ) arr、mid、low ); } publicstaticvoidquicksort (int [ ] arr,int start,int end ) ) /以三分位居首位的selectpivotmedianofthree(arr,start,end ) ); intpar=partion(arr,start,end ); if(parstart1)快速启动(arr,start,par - 1 ); (if ) parend-1 ) quicksort ) arr,par 1,end ); } }} 以上三种方式以及上文末尾提到的优化方法往往结合使用,这样优化后的效率才能有明显的提高。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。