算法之分冶算法-合併算法

 private static int[] mergeSort(int[] array) { 
 
//如果數組的長度大於1,繼續分解數組 
         if (array.length > 1) { 
             int leftLength = array.length / 2; 
             int rightLength = array.length - leftLength; 
             //創建兩個新的數組 
            int[] left = new int[leftLength]; 
             int[] right = new int[rightLength]; 
             //將array中的值分別對應複製到兩個子數組中 
             for (int i=0; i<leftLength; i++) { 
                 left[i] = array[i]; 
             } 
             for (int i=0; i<rightLength; i++) { 
                 right[i] = array[leftLength+i]; 
            } 
             //遞歸利用合併排序,排序子數組 
            left = mergeSort(left); 
            right = mergeSort(right); 
             //設置初始索引 
            int i = 0; 
            int j = 0; 
             for (int k=0; k<array.length; k++) { 
                 //如果左邊數據索引到達邊界則取右邊的值 
                 if (i == leftLength && j < rightLength) { 
                     array[k] = right[j]; 
                    j++; 
                //如果右邊數組索引到達邊界,取左數組的值 
                } else if (i < leftLength && j == rightLength) { 
                    array[k] = left[i]; 
                     i++; 
                 //如果均爲到達則取,較小的值 
                 } else if (i < leftLength && j < rightLength) { 
                     if (left[i] > right[j]) { 
                         array[k] = right[j]; 
                         j++; 
                     } else { 
                        array[k] = left[i]; 
                         i++; 
                    } 
                }  
            } 
        }  
         return array; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章