排序算法-归并排序

归并排序:

归并排序的基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

归并排序的过程:

排序算法-归并排序_第1张图片

归并排序的java实现:
package com.algorithm.sort;

import com.algorithm.PrintUtils;

public class MergeSort {

	public static void sort(int source[],int start ,int end) {
//		int result[] =new int[end-start];
	
		if(start >=end)
			 return;
		int mid = (end+start)/2;
		sort(source,start,mid);
		sort(source,mid+1,end);
		merge(source,start,mid,end);
			
	
	}
	
	private static void merge(int[] source, int start,int mid ,int end) {
		
		int tmp[] =new int[source.length];
		int i=start,j=mid+1,k =start;
	    while (i <= mid && j <= end)  
	    {  
	        if (source[i] <= source[j])  
	        	tmp[k++] = source[i++];  
	        else  
	        	tmp[k++] = source[j++];  
	    }  
	      
	    while (i <= mid)  
	    	tmp[k++] = source[i++];  
	      
	    while (j <= end)  
	    	tmp[k++] = source[j++];
	    
	    int m =start;
	    while (m <= end) {  
	    	source[m] = tmp[m++];  
        } 
	      
	}

	public static void mergeSort(int []source ){
		sort(source, 0, source.length-1);  
	}
	
	public static void main(String[] args) {
		int source[]={120,324,43,234253,2134,324,2765};
		mergeSort(source);
		PrintUtils.printIntArray(source);
	}
	
}


算法分析 :时间复杂度o(N*logN) 空间复杂度为O(n)


你可能感兴趣的:(排序算法-归并排序)