基礎排序(二)
阿新 • • 發佈:2018-12-17
歸併排序的簡單實現思路:
通過遞迴把待排序的陣列拆分成多個子序列,再通過歸併兩兩合併。
寫的時候邏輯出了點問題,在第二次合併的時候沒有排序。
搞定後覺得又low又有潛藏bug,下面簡單記錄下程式碼:
package day1; public class MergeSort { public static void main(String []arg){ int []arr=ArrarHelp.randomArray(9, 123);int []e=new int[arr.length+1]; MergeSort.sort(arr,0,arr.length-1,e); } public static void sort(int []arr,int s,int l,int []e){ if(s<l){ int mid=(s+l)/2; sort(arr,s,mid,e); sort(arr,mid+1,l,e); Msort(arr, s, l, e); }else{ return; } } public static void Msort(int []arr,int s,int l,int []e){ if(s>l){ return ; } else{ int mid=(s+l)/2; int i=s; int j=mid+1; for (int a=i;a<=l;a++){ e[a]=arr[a] ; }for(int k=s;k<=l;k++) { if(i>mid){ arr[k]=e[j]; j++; } else if(j>l){ arr[k]=e[i]; i++; } else if(e[i]<e[j]){ arr[k]=e[i]; i++; } else{ arr[k]=e[j]; j++; } } for (int o : arr) { System.out.print(o+" "); } System.out.println(); } }}
從執行結果可以很直觀的看出交換順序:
(自己看得懂,沒毛病。)