以下に バブルソート・選択ソート・クイックソート(再帰版)を同じ配列で比較できる「完全な Java コード」 をまとめました。
ポイント:
- 元の配列は
originalとして保存 - ソートするときは
copyOfでコピーしてから実行 - 各ソートの結果を並べて比較できるようにまとめて表示
すぐコンパイル&実行できます。
3種類のソートを比較する Java 完全コード
import java.util.Arrays;
public class SortComparison {
public static void main(String[] args) {
int[] original = {5, 3, 8, 1, 4};
System.out.println("元の配列: " + Arrays.toString(original));
// バブルソート
int[] bubbleArr = Arrays.copyOf(original, original.length);
bubbleSort(bubbleArr);
System.out.println("バブルソート: " + Arrays.toString(bubbleArr));
// 選択ソート
int[] selectArr = Arrays.copyOf(original, original.length);
selectionSort(selectArr);
System.out.println("選択ソート: " + Arrays.toString(selectArr));
// クイックソート
int[] quickArr = Arrays.copyOf(original, original.length);
quickSort(quickArr, 0, quickArr.length - 1);
System.out.println("クイックソート: " + Arrays.toString(quickArr));
}
// -------------------------
// バブルソート
// -------------------------
public static void bubbleSort(int[] arr) {
int n = arr.length;
boolean swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
swapped = true;
}
}
// 交換が一度も行われなければ終了
if (!swapped) break;
}
}
// -------------------------
// 選択ソート
// -------------------------
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
// 最小値を探す
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 見つかった最小値をi番目と交換
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
// -------------------------
// クイックソート(再帰)
// -------------------------
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) return;
int pivot = arr[(left + right) / 2]; // 真ん中をpivotに
int index = partition(arr, left, right, pivot);
quickSort(arr, left, index - 1);
quickSort(arr, index, right);
}
public static int partition(int[] arr, int left, int right, int pivot) {
while (left <= right) {
while (arr[left] < pivot) left++;
while (arr[right] > pivot) right--;
if (left <= right) {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
return left; // 次の分割点
}
}
Java実行例(例の配列 {5,3,8,1,4} のとき)
元の配列: [5, 3, 8, 1, 4]
バブルソート: [1, 3, 4, 5, 8]
選択ソート: [1, 3, 4, 5, 8]
クイックソート: [1, 3, 4, 5, 8]
解説まとめ
| ソート種類 | 特徴 | 時間計算量 |
|---|---|---|
| バブルソート | 簡単・交換多い | O(n²) |
| 選択ソート | 交換は少ないが比較が多い | O(n²) |
| クイックソート | とても速い。実用レベル | 平均 O(n log n) |
