新版Qt可以支持Android和IOS平台
归并排序采用分治法,其速度仅次于快速排序,且是一种稳定的排序算法。即相等的元素的顺序不会改变,如输入记录3(1),2(2),4(3),4(4),1(5),排序后得到,1(5),2(2),3(1),4(3),4(4),其中的4(3),4(4)就是输入时的顺序,因此对于某些数据要按输入时的顺序作为指标排序时,这相对于快速排序来说是优势。
对于数列(5,2,4,7,1,3,2,6),其排序过程如下:
初始状态:(5,2,4,7,1,3,2,6)
初次归并:(5,2)(4,7)(1,3)(2,6)
二次归并:(2,4,5,7)(1,2,3,6)
三次归并:(1,2,2,3,4,5,6,7}
如下:
public class MergeSortClass { public static int[] mergeSort(int[] list){ if(list.length==1){ return list; } else{ int[] listL=new int[list.length/2]; int[] listR=new int[list.length-list.length/2]; int center=list.length/2; for(int i=0;i<center;i++){ listL[i]=list[i]; } for(int i=center,j=0;i<list.length;i++,j++){ listR[j]=list[i]; } int[] sortedListL=mergeSort(listL); int[] sortedListR=mergeSort(listR); int[] o_list=mergeTwoSort(sortedListL,sortedListR); return o_list; } } public static int[] mergeTwoSort(int[] sortedListL,int[] sortedListR){ int i=0,j=0; int[] o_list=new int[sortedListL.length+sortedListR.length]; int foot=0; while(i<sortedListL.length && j<sortedListR.length){ if(sortedListL[i]<sortedListR[j]){ o_list[foot]=sortedListL[i]; i++; }else{ o_list[foot]=sortedListR[j]; j++; } foot++; } if(i==sortedListL.length){ while(j<sortedListR.length){ o_list[foot++]=sortedListR[j++]; } }else{ while(i<sortedListL.length){ o_list[foot++]=sortedListL[i++]; } } return o_list; } public static void outPut(int[] list){ for(int i=0;i<list.length;i++){ System.out.print(list[i]+" "); } } public static void main(String[] args){ int[] list={5,2,4,7,1,3,2,6}; int [] list1=mergeSort(list); outPut(list1); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。