演算法學習-遞迴排序

不知為何就叫呵呵發表於2016-09-19
如圖,為sort()方法的過程:



package
javase0919; public class RecursionTest { private static int[] arr={2,56,8,6,95,45,23,15,75,6}; public static void main(String[] args) { intsort(0,arr.length-1); for(int v:arr) System.out.print(v+" "); }
  /**
   *將陣列分割最小
   */
public static void intsort(int l,int r){ if(r>l){ int n=(l+r)/2; intsort(l,n); intsort(n+1,r); sort(l,n,r); } }
/**
 *合併兩個排好序的陣列
 */
public static void sort(int l,int n,int r){ /**
      *建立兩個陣列,用原陣列對應元素填充
      */
    
int[] L=new int[n-l+1]; int[] R=new int[r-n]; for(int i=0;i<L.length;i++) L[i]=arr[l+i];//找到對應的陣列元素 for(int j=0;j<R.length;j++) R[j]=arr[j+n+1];//找到對應陣列元素 int i=0,j=0; for(int k=l;k<r;k++){ if(L[i]<=R[j]){//判斷左右陣列相對較小值 arr[k]=L[i];//修改原陣列的值 i++; }else{ arr[k]=R[j]; j++; }
      
       /**
        *當左或右陣列到達邊界時,直接把另一個陣列剩下的值直接賦予原陣列
        */
      if(i>=L.length){
                for(;j<R.length;j++){
                    k++;
                    arr[k]=R[j];                
                }
                return;
            }
        
if(j>=R.length){ for(;i<L.length;i++){ k++; arr[k]=L[i]; } return; } } } }

 

相關文章