標籤:分治法 bsp stat while 遞迴 比較 排序 有序 java實現
public static void main(String[] args) { int arr[]={2,4,6,8,14,1,3,5,9,11}; merge(arr, 0, arr.length-1); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } //遞迴排序,分治法,自頂向下,遞迴分割數組,最終歸併 public static void merge(int [] arr,int start,int end){ int mid=(start+end)/2; if(start<end){ merge(arr, start, mid); //遞迴對arr[start...mid]排序 merge(arr, mid+1, end);//遞迴對arr[mid+1...end]排序 doMerge(arr,start,mid,end);//組合,將兩個有序合并為一個有序區 } } //組合,歸併 private static void doMerge(int[] arr, int start, int mid, int end) { int temp[]=new int[end-start+1]; int tempIndex=0; int index=start; int right=mid+1; //兩個子序列進行比較,小的放入臨時數組 while(index<=mid&&right<=end){ if(arr[index]<=arr[right]){ temp[tempIndex++]=arr[index++]; }else{ temp[tempIndex++]=arr[right++]; } } //將左邊剩下的元素加入到臨時數組 while(index<=mid){ temp[tempIndex++]=arr[index++]; } //將右邊剩下的元素加入到臨時數組 while(right<=end){ temp[tempIndex++]=arr[right++]; } //複製臨時資料到arrr[]數組中 for(int i=0;i<temp.length;i++){ arr[i+start]=temp[i]; } }
歸併排序java實現