前提・実現したいこと
マージソートをしたいです
発生している問題・エラーメッセージ
エラーはなく実行されるのですが、結果がソートされていません
どこを直すべきか教えてください
以下実行結果
{3, 2, 8, 4, 5, 7, 1, 0, 6, 9} // ソート前 {3, 2, 7, 1, 0, 6, 8, 4, 5, 9} // ソート後
該当のソースコード
Java
1public class testMeregeSort { 2 private final int n = 10; 3 private int[] a = { 3, 2, 8, 4, 5, 7, 1, 0, 6, 9 }; 4 5 public testMeregeSort() { 6 } 7 8 private void mergesort(int low, int high) { 9 int xSize = (high - low + 1) / 2; 10 int ySize = (high + 1) - xSize; 11 int[] x = new int[xSize]; 12 int[] y = new int[ySize]; 13 int[] z = new int[n]; 14 int xIndex = 0; 15 int yIndex = 0; 16 17 if (high - low + 1 <= 1) { 18 return; 19 } 20 21 // ここから分割 22 for (int i = 0; i < xSize; i++) { 23 x[i] = a[i]; 24 } 25 26 for (int i = 0; i < ySize; i++) { 27 y[i] = a[i + xSize]; 28 } 29 30 mergesort(0, xSize - 1); 31 mergesort(0, ySize - 1); 32 33 // ここからマージ 34 while (xIndex < xSize && yIndex < ySize) { 35 if (x[xIndex] <= y[yIndex]) { 36 z[xIndex + yIndex] = x[xIndex]; 37 xIndex++; 38 } else { 39 z[xIndex + yIndex] = y[yIndex]; 40 yIndex++; 41 } 42 } 43 44 if (xIndex >= xSize) { 45 for (int i = yIndex; i < ySize; i++) { 46 z[i + xIndex] = y[i]; 47 } 48 } else { 49 for (int i = xIndex; i < xSize; i++) { 50 z[i + yIndex] = x[i]; 51 } 52 } 53 54 for (int i = 0; i < n; i++) { 55 a[i] = z[i]; 56 } 57 58 } 59 60 public void sort() { 61 mergesort(0, a.length - 1); 62 63 for (int i = 0; i < n; i++) { 64 System.out.println(a[i]); 65 } 66 } 67 68 public static void main(String[] args) { 69 testMeregeSort ms = new testMeregeSort(); 70 ms.sort(); 71 } 72} 73
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/29 02:36