算法之分冶算法-合并算法

 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; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章