1. 程式人生 > >基礎排序(二)

基礎排序(二)

歸併排序的簡單實現思路:

       通過遞迴把待排序的陣列拆分成多個子序列,再通過歸併兩兩合併。

       寫的時候邏輯出了點問題,在第二次合併的時候沒有排序。

       搞定後覺得又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(); } }}

從執行結果可以很直觀的看出交換順序:

(自己看得懂,沒毛病。)