java排序.docx
- 文档编号:29437765
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:20
- 大小:19.05KB
java排序.docx
《java排序.docx》由会员分享,可在线阅读,更多相关《java排序.docx(20页珍藏版)》请在冰豆网上搜索。
java排序
0.排序基类
/**
*为了后面排序算法扩展的方便,引入一个基础类Sorter
*/
packagecom.javasort;
/**
*任何排序算法都继承此公共抽象基类Sorter
*@authorDanielCheng
*
*/
publicabstractclassSorter
/**
*任何排序算法都重写此抽象方法
*@paramarray:
欲排序的数组
*@paramfrom:
元素的起始下标
*@paramlen:
数组的长度
*/
publicabstractvoidsort(E[]array,intfrom,intlen);
/**
*测试排序用例时调用此方法
*@paramarray
*/
publicfinalvoidsort(E[]array){
sort(array,0,array.length);
}
/**
*需要交换元素顺序时调用此方法
*@paramarray
*@paramfrom
*@paramto
*/
protectedfinalvoidswap(E[]array,intfrom,intto){
Etmp=array[from];
array[from]=array[to];
array[to]=tmp;
}
/**
*打印排序后数组元素时调用此方法
*@paramarray
*/
publicfinalvoidprintResult(E[]array){
for(inti=0;i System.out.print(array+","); } } } 1.冒泡排序 packagecom.javasort.bubblesorter; /** *冒泡排序: 最简单的排序算法了,算法思想是每次从数组末端开始比较相邻两元素, *把第i小的冒泡到数组的第i个位置。 i从0一直到N-1从而完成排序。 *(当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到数组的第N-i个位置。 *i从0一直到N-1从而完成排序。 ) */ importcom.javasort.Sorter; /** *@authorDanielCheng * */ publicclassBubbleSorter privatestaticbooleanDOWN=true; @Override publicvoidsort(E[]array,intfrom,intlen){ if(DOWN){ bubble_down(array,from,len); }else{ bubble_up(array,from,len); } } privatefinalvoidbubble_down(E[]array,intfrom,intlen){ for(inti=from;i for(intj=from+len-1;j>i;j--){ if(array[j].compareTo(array[j-1])<0){ swap(array,j-1,j); } } } } privatefinalvoidbubble_up(E[]array,intfrom,intlen){ for(inti=from+len-1;i>=from;i--){ for(intj=from;j if(array[j].compareTo(array[j+1])>0){ swap(array,j,j+1); } } } } staticfinalvoidup(){ DOWN=false; } } /** * */ packagecom.javasort.bubblesorter; importcom.javasort.Sorter; /** *@authorDanielCheng * */ publicclassBubbleSorterTest{ publicstaticvoidmain(String[]args){ Comparable[]array={5,1,13,2,17,9,7,4,0}; SorterbubbleSorter=newBubbleSorter(); //BubbleSorter.up(); bubbleSorter.sort(array); bubbleSorter.printResult(array); } } 2.插入法排序 packagecom.javasort.insertsorter; /** *插入法排序在数据规模小的时候十分高效,该算法每次插入第k+1个元素到 文章出处: DIY部落( />*前k个有序数组中一个合适的的位置(k=0...N-1),从而完成排序。 */ importcom.javasort.Sorter; /** *@authorDanielCheng * */ publicclassInsertSorter @Override publicvoidsort(E[]array,intfrom,intlen){ Etemp=null; for(inti=from+1;i temp=array; intj=i; for(;j>from;j--){ if(pareTo(array[j-1])<0){ array[j]=array[j-1]; } else break; } array[j]=temp; } } } packagecom.javasort.insertsorter; importcom.javasort.Sorter; publicclassInsertSorterTest{ publicstaticvoidmain(String[]args){ Comparable[]array={5,1,13,2,14,9,7,4,0}; SorterinsertSort=newInsertSorter(); insertSort.sort(array); insertSort.printResult(array); } } 3.快速排序 packagecom.javasort.quicksorter; /** *快速排序是目前使用可能最广泛的排序算法.一般分如下步骤: *1)选择一个枢纽元素(有很对选法,我的实现里采用去中间元素的简单方法) *2)使用该枢纽元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。 并把枢纽元素放在合适的位置。 *3)根据枢纽元素最后确定的位置,把数组分成三部分,左边的,右边的,枢纽元素自己,对左边的,右边的分别递归调用快速排序算法即可。 *快速排序的核心在于分割算法,也可以说是最有技巧的部分。 */ importcom.javasort.Sorter; /** *@authorDanielCheng * */ publicclassQuickSorter @Override publicvoidsort(E[]array,intfrom,intlen){ q_sort(array,from,from+len-1); } privatefinalvoidq_sort(E[]array,intfrom,intto){ if(to-from<1) return; intpivot=selectPivot(array,from,to); pivot=partion(array,from,to,pivot); q_sort(array,from,pivot-1); q_sort(array,pivot+1,to); } privateintpartion(E[]array,intfrom,intto,intpivot){ Etmp=array[pivot]; array[pivot]=array[to];//nowto'spositionisavailable while(from! =to){ while(from from++; if(from array[to]=array[from];//nowfrom'spositionisavailable to--; } while(from to--; if(from array[from]=array[to];//nowto'spositionisavailablenow from++; } } array[from]=tmp; returnfrom; } privateintselectPivot(E[]array,intfrom,intto){ return(from+to)/2; } } /** * */ packagecom.javasort.quicksorter; importcom.javasort.Sorter; importcom.javasort.insertsorter.InsertSorter; /** *@authorDanielCheng * */ publicclassQuickSorterTest{ publicstaticvoidmain(Strin 文章出处: DIY部落( g[]args){ Comparable[]array={5,1,13,2,14,9,7,4,0}; SorterquickSorter=newQuickSorter(); quickSorter.sort(array); quickSorter.printResult(array); } } 4.选择排序 packagecom.javasort.selectsorter; /** *选择排序: 相对于冒泡来说,它不是每次发现逆序都交换,而是 *在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换, *从而保证数组最终的有序。 *相对与插入排序来说,选择排序每次选出的都是全局第i小的, *不会调整前i个元素了。 */ importcom.javasort.Sorter; /** * *@authorDanielCheng * */ publicclassSelectSorter @Override publicvoidsort(E[]array,intfrom,intlen){ for(inti=0;i intsmallest=i; intj=i+from; for(;j if(array[j].compareTo(array[smallest])<0){ smallest=j; } } swap(array,i,smallest); } } } packagecom.javasort.selectsorter; importcom.javasort.Sorter; importcom.javasort.bubblesorter.BubbleSorter; publicclassSelectSorterTest{ publicstaticvoidmain(String[]args){ Comparable[]array={5,1,13,2,17,9,7,4,0}; SorterselectSorter=newSelectSorter(); selectSorter.sort(array); selectSorter.printResult(array); } } /** *数组排序 * *@authorJRunner * *2009-10-26 * *E-mainJRunner@ */ classTestSort{ publicstaticvoidmain(String[]args){ int[]a={1,5,7,9,23,2,6}; print(a); toSort1(a); //toSort2(a); //toSort3(a); //toSort4(a); print(a); } //方法一(更换值) privatestaticvoidtoSort1(int[]a){ intstep; for(inti=0;i<(a.length-1);i++){ for(intj=0;j<(a.length-1)-i;j++){ if(a[j]>a[j+1]){ step=a[j]; a[j]=a[j+1]; a[j+1]=step; } } } } //方法二(更换值) privatestaticvoidtoSort2(int[]a){ intstep;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 排序