-
クイックソート
実装ークイックソートOOP版 クイックソートはマージソートと同じ仕組みだと思い、そういう方向で進んでいった なので、マージソートのように半分に分割して、新しい配列に再起関数を代入する形だとてっきり思った だが、ピボットになるインデックスをどうやって決めればいいのか、それが全然わからなかった 結局、すべてAIに頼るしかなかった その結果として得られたのが以下のロジックである ここではLowとHighというポインターみたいな概念が必要だった public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivotIndex = partition(arr, low, high); quickSort(arr, low, pivotIndex - 1); // left side quickSort(arr, pivotIndex + 1, high); // right side } }...
-
マージソート
実装ーマージソート昇順 最初に工夫して書いたソースコードだけど、正しく動作しない 前半部と後半部が分かれるのはわかるので、折半にすることまでは思いついたが、ベースケースの定義が全然間違っている なのでmergeSort()を置く位置も間違えてしまった その上に、CallStackがソースコードで展開するとどのようにメソッドが重なるのか理解をちゃんとしてなかった public static void mergeSort(int[] arr) { System.out.println(arr.length); int[] beforeArray = new int[arr.length / 2]; int[] afterArray = new int[arr.length / 2]; for (int i = 0; i < arr.length / 2; i++) { if(arr.length == 1) { return; } beforeArray[i] = arr[i]; if(i == arr.length...
-
バブルソートと挿入ソート
実装ーバブルソート 最初のロジックは以下だった。 ただ、iを全然使わずにしていた public static void executeBubbleSort(int[] arr) { for(int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] =...