数据结构与算法 排序--归并排序

Java数据结构和算法
上一篇 主目录 下一篇
package sort;

public class MergeSort {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub

		int[] arr=new int[] {
     34,23,45,-56,76,8,4,34,0};
		System.out.println("before sorting");
		for(int a:arr) {
     
			System.out.printf("%d\t",a);
		}
		mergeSort(arr,0,arr.length-1);
		System.out.println("\nafter sorting");
		for(int a:arr) {
     
			System.out.printf("%d\t",a);
		}
	}
	
	//归并排序
	public static void mergeSort(int[] arr,int left,int right) {
     
		if(left<right) {
     
			int mid=(left+right)/2;
			mergeSort(arr,left,mid);
			mergeSort(arr,mid+1,right);
			merge(arr,left,mid,right);
		}
	}
	
	public static void merge(int[] arr,int left,int mid,int right) {
     
		int i,j,p;
		int left_length=mid-left+1;
		int right_length=right-mid;
		int[] left_arr=new int[left_length];
		int[] right_arr=new int[right_length];
		for(i=0,p=left;i<left_length;i++,p++) {
     
			left_arr[i]=arr[p];
		}
		for(i=0,p=mid+1;i<right_length;i++,p++) {
     
			right_arr[i]=arr[p];
		}
		for(i=0,j=0,p=left;i<left_length&&j<right_length;p++) {
     
			if(left_arr[i]>right_arr[j]) {
     
				arr[p]=right_arr[j++];
			}else {
     
				arr[p]=left_arr[i++];
			}
		}
		if(i<left_length) {
     
			for(;i<left_length;i++,p++) {
     
				arr[p]=left_arr[i];
			}
		}
		if(j<right_length) {
     
			for(;j<right_length;j++,p++) {
     
				arr[p]=right_arr[j];
			}
		}
	}

}

你可能感兴趣的:(Java,归并排序)