1
マージソートアルゴリズムを作成しようとしましたが、どこが間違っているのか分かりません。私が間違ったことを私に見せてもらえますか?アルゴリズムを使っていくつかの有用なリソースや練習を提案しますか?マージソートの実装で間違いを見つけるにはどうすればよいですか?
マージでpublic class MergeSort {
private int[] auxArray;
public void sort(int[] array)
{
auxArray = new int[array.length];
sort(array, 0, array.length - 1);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
private void sort(int[] array, int begin, int end)
{
if(begin >= end) return ;
int middle = begin + (end - begin)/2;
sort(array, begin, middle);
sort(array, middle + 1, end);
merge(array, begin, middle, end);
}
private void merge(int[] array, int begin, int middle, int end)
{
int i = begin;
int j = middle + 1;
for (int k = begin; k <= end; k++) {
auxArray[k] = array[k];
}
for (int k = begin; k <= end; k++)
{
if(i > middle) array[k] = auxArray[j++];
else if(j > end) array[k] = auxArray[i++];
else if(array[i] >= array[j])
{
array[k] = auxArray[j++];
}
else
array[k] = auxArray[i++];
}
}
public static void main(String[] args) throws Exception {
MergeSort sort = new MergeSort();
int[] array = new int[] {10, 9, 8, 7, 6, 5 ,4, 3, 2 ,1};
sort.sort(array);
}
}
に
を変更するには、それが現在何をするかを説明するために、データセットの後/前にお示ししませんか?あなたは何が働いていないと言いますか? – halfer
'end'が' begin + 1'に等しいときに何が起こるかを調べることをお勧めします。つまり、配列に正確に1つの項目がある場合はどうなりますか。 – user3386109
最初に 'array'を' auxArray'に指定した後、 'private'メソッドのいずれかで' array'パラメータを渡す必要はありません。そこで 'auxArray'を使用してください。 – maraca