算法之分冶算法-合併算法
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;
}
//如果數組的長度大於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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.