public class MergeSort {
public static void main(String[] args) {
int[] numbers = {5, 2, 8, 3, 1};
mergeSort(numbers, 0, numbers.length - 1);
System.out.println("ソート結果:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
public static void merge(int[] arr, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
int[] leftArray = new int[n1];
int[] rightArray = new int[n2];
for (int i = 0; i < n1; ++i)
leftArray[i] = arr[left + i];
for (int j = 0; j < n2; ++j)
rightArray[j] = arr[mid + 1 + j];
int i = 0, j = 0;
int k = left;
while (i < n1 && j < n2) {
if (leftArray[i] <= rightArray[j]) {
arr[k] = leftArray[i];
i++;
} else {
arr[k] = rightArray[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = leftArray[i];
i++;
k++;
}
while (j < n2) {
arr[k] = rightArray[j];
j++;
k++;
}
}
}
このプログラムでは、mergeSort
関数が配列を分割し、再帰的にソートします。merge
関数は、2つのソートされた配列をマージして、結果を元の配列に格納します。
上記のプログラムを実行すると、次のような出力が得られます:
ソート結果:
1 2 3 5 8
このコード例は、Javaでマージソートを実装する一般的な方法です。他にもさまざまな方法がありますが、この例は基本的なアルゴリズムを示しています。