Java中各种排序算法.docx
- 文档编号:5191516
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:15
- 大小:16.51KB
Java中各种排序算法.docx
《Java中各种排序算法.docx》由会员分享,可在线阅读,更多相关《Java中各种排序算法.docx(15页珍藏版)》请在冰豆网上搜索。
Java中各种排序算法
//插入排序:
packageorg.rut.util.algorithm.support;
importorg.rut.util.algorithm.SortUtil;
/**
*@authortreeroot
*@since2006-2-2
*@version1.0
*/
publicclassInsertSortimplementsSortUtil.Sort{
/**(non-Javadoc)
*@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
publicvoidsort(int[]data){
inttemp;
for(inti=1;i for(intj=i;(j>0)&&(data[j] SortUtil.swap(data,j,j-1); } } } } //冒泡排序: for(vari=0;i for(varj=i+1;j<=arr.length-1;j++){ if(eval(arr[i]) temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassBubbleSortimplementsSortUtil.Sort{ /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ inttemp; for(inti=0;i for(intj=data.length-1;j>i;j--){ if(data[j] SortUtil.swap(data,j,j-1); } } } } } //选择排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassSelectionSortimplementsSortUtil.Sort{ /** *(non-Javadoc) * *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ inttemp; for(inti=0;i intlowIndex=i; for(intj=data.length-1;j>i;j--){ if(data[j] lowIndex=j; } } SortUtil.swap(data,i,lowIndex); } } } //Shell排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassShellSortimplementsSortUtil.Sort{ /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ for(inti=data.length/2;i>2;i/=2){ for(intj=0;j insertSort(data,j,i); } } insertSort(data,0,1); } /** *@paramdata *@paramj *@parami */ privatevoidinsertSort(int[]data,intstart,intinc){ inttemp; for(inti=start+inc;i for(intj=i;(j>=inc)&&(data[j] SortUtil.swap(data,j,j-inc); } } } } //快速排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassQuickSortimplementsSortUtil.Sort{ /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ quickSort(data,0,data.length-1); } privatevoidquickSort(int[]data,inti,intj){ intpivotIndex=(i+j)/2; //swap SortUtil.swap(data,pivotIndex,j); intk=partition(data,i-1,j,data[j]); SortUtil.swap(data,k,j); if((k-i)>1)quickSort(data,i,k-1); if((j-k)>1)quickSort(data,k+1,j); } /** *@paramdata *@parami *@paramj *@return */ privateintpartition(int[]data,intl,intr,intpivot){ do{ while(data[++l] while((r! =0)&&data[--r]>pivot); SortUtil.swap(data,l,r); } while(l SortUtil.swap(data,l,r); returnl; } } //改进后的快速排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassImprovedQuickSortimplementsSortUtil.Sort{ privatestaticintMAX_STACK_SIZE=4096; privatestaticintTHRESHOLD=10; /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ int[]stack=newint[MAX_STACK_SIZE]; inttop=-1; intpivot; intpivotIndex,l,r; stack[++top]=0; stack[++top]=data.length-1; while(top>0){ intj=stack[top--]; inti=stack[top--]; pivotIndex=(i+j)/2; pivot=data[pivotIndex]; SortUtil.swap(data,pivotIndex,j); //partition l=i-1; r=j; do{ while(data[++l] while((r! =0)&&(data[--r]>pivot)); SortUtil.swap(data,l,r); } while(l SortUtil.swap(data,l,r); SortUtil.swap(data,l,j); if((l-i)>THRESHOLD){ stack[++top]=i; stack[++top]=l-1; } if((j-l)>THRESHOLD){ stack[++top]=l+1; stack[++top]=j; } } //newInsertSort().sort(data); insertSort(data); } /** *@paramdata */ privatevoidinsertSort(int[]data){ inttemp; for(inti=1;i for(intj=i;(j>0)&&(data[j] SortUtil.swap(data,j,j-1); } } } } //归并排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassMergeSortimplementsSortUtil.Sort{ /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ int[]temp=newint[data.length]; mergeSort(data,temp,0,data.length-1); } privatevoidmergeSort(int[]data,int[]temp,intl,intr){ intmid=(l+r)/2; if(l==r)return; mergeSort(data,temp,l,mid); mergeSort(data,temp,mid+1,r); for(inti=l;i<=r;i++){ temp[i]=data[i]; } inti1=l; inti2=mid+1; for(intcur=l;cur<=r;cur++){ if(i1==mid+1) data[cur]=temp[i2++]; elseif(i2>r) data[cur]=temp[i1++]; elseif(temp[i1] data[cur]=temp[i1++]; else data[cur]=temp[i2++]; } } } //改进后的归并排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassImprovedMergeSortimplementsSortUtil.Sort{ privatestaticfinalintTHRESHOLD=10; /** *(non-Javadoc) * *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ int[]temp=newint[data.length]; mergeSort(data,temp,0,data.length-1); } privatevoidmergeSort(int[]data,int[]temp,intl,intr){ inti,j,k; intmid=(l+r)/2; if(l==r) return; if((mid-l)>=THRESHOLD) mergeSort(data,temp,l,mid); else insertSort(data,l,mid-l+1); if((r-mid)>THRESHOLD) mergeSort(data,temp,mid+1,r); else insertSort(data,mid+1,r-mid); for(i=l;i<=mid;i++){ temp[i]=data[i]; } for(j=1;j<=r-mid;j++){ temp[r-j+1]=data[j+mid]; } inta=temp[l]; intb=temp[r]; for(i=l,j=r,k=l;k<=r;k++){ if(a data[k]=temp[i++]; a=temp[i]; }else{ data[k]=temp[j--]; b=temp[j]; } } } /** *@paramdata *@paraml *@parami */ privatevoidinsertSort(int[]data,intstart,intlen){ for(inti=start+1;i for(intj=i;(j>start)&&data[j] SortUtil.swap(data,j,j-1); } } } } //堆排序: packageorg.rut.util.algorithm.support; importorg.rut.util.algorithm.SortUtil; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassHeapSortimplementsSortUtil.Sort{ /**(non-Javadoc) *@seeorg.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ publicvoidsort(int[]data){ MaxHeaph=newMaxHeap(); h.init(data); for(inti=0;i h.remove(); System.arraycopy(h.queue,1,data,0,data.length); } privatestaticclassMaxHeap{ voidinit(int[]data){ this.queue=newint[data.length+1]; for(inti=0;i queue[++size]=data[i]; fixUp(size); } } privateintsize=0; privateint[]queue; publicintget(){ returnqueue[1]; } publicvoidremove(){ SortUtil.swap(queue,1,size--); fixDown (1); } //fixdown privatevoidfixDown(intk){ intj; while((j=k<<1)<=size){ if(j j++; if(queue[k]>queue[j])//不用交换 break; SortUtil.swap(queue,j,k); k=j; } } privatevoidfixUp(intk){ while(k>1){ intj=k>>1; if(queue[j]>queue[k]) break; SortUtil.swap(queue,j,k); k=j; } } } } //SortUtil: packageorg.rut.util.algorithm; importorg.rut.util.algorithm.support.BubbleSort; importorg.rut.util.algorithm.support.HeapSort; importorg.rut.util.algorithm.support.ImprovedMergeSort; importorg.rut.util.algorithm.support.ImprovedQuickSort; importorg.rut.util.algorithm.support.InsertSort; importorg.rut.util.algorithm.support.MergeSort; importorg.rut.util.algorithm.support.QuickSort; importorg.rut.util.algorithm.support.SelectionSort; importorg.rut.util.algorithm.support.ShellSort; /** *@authortreeroot *@since2006-2-2 *@version1.0 */ publicclassSortUtil{ publicfinalstaticintINSERT=1; publicfinalstaticintBUBBLE=2; publicfinalstaticintSELECTION=3; publicfinalstaticintSHELL=4; publicfinalstaticintQUICK=5; publicfinalstaticintIMPROVED_QUICK=6; publicfinalstaticintMERGE=7; publicfinalstaticintIMPROVED_MERGE=8; publicfinalstaticintHEAP=9; publicstaticvoidsort(int[]data){ sort(data,IMPROVED_QUICK); } privatestaticString[]name={ "insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap" }; privatestaticSort[]impl=newSort[]{ newInsertSort(), newBubbleSort(), newSelectionSort(), newShellSort(), newQuickSort(), newImprovedQuickSort(), newMergeSort(), newImprovedMergeSort(), newHeapSort() }; publicstaticStringtoString(intalgorithm){ returnname[algorithm-1]; } publicstaticvoidsort(int[]data,intalgorithm){ impl[algorithm-1].sort(data); } publicstaticinterfaceSort{ publicvoidsort(int[]data); } publicstaticvoidswap(int[]data,inti,intj){ inttemp=data[i]; data[i]=data[j]; data[j]=temp; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 各种 排序 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)