新版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);
	}
}


新版Qt可以支持Android和IOS平台,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。