歸併排序--java實現

public class MergeSort {
	public static void sort(int nums[],int left,int right) {
		 if(left<right) {
//			 中間節點
			 int mid = (left+right)/2;
//			 一直拆分左邊直到left =0 mid = 0 right =1
			 sort(nums,left,mid);
//			 一直拆分右邊直到left =0 mid = 0 right =1
			 sort(nums,mid+1,right);
//			 排序邏輯,比較大小,並且將原序列排序
			 mergesort(nums,left,mid,right);
		 }
	}
	public static void mergesort(int nums[],int left,int mid,int right) {
//		左邊數組長度
		int n1 = mid - left+1;
//		右邊數組長度
		int n2 = right-mid;
		int[] L = new int [n1];
		int[] R = new int [n2];
//		將原序列第一個到第mid放入到左邊數組
		for(int i = 0;i<n1;++i) {
			L[i] = nums[left+i];
		}
//		將原序列第mid+1放入到右邊數組
		for(int j = 0;j<n2;++j) {
			R[j] = nums[mid+1+j];
		}
		int i = 0;
		int j = 0;
//		一直指向最左邊的數
		int k = left;
//		將左右兩邊序列排序,並且插入到原序列
		while(i<n1&&j<n2) {
			if(L[i]<=R[j]) {
				nums[k] = L[i];
				i++;
			}
			else {
				nums[k] = R[j];
				j++;
			}
			k++;
		}
//		當右邊排完後,將左邊的全部插入到序列
			while(i<n1) {
				nums[k] =L[i];
				i++;
				k++;
			}
//			當左邊全部插入原序列後,將右邊全部插入到原序列
			while(j<n2){
				nums[k] = R[j];
				j++;
				k++;
			}
		}
	public static void main(String[] args) {
		int a[] = {2,4,5,7,1,2,3,6};
		sort(a, 0, a.length-1);
		for(int b :a) {
			System.out.println(b);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章