私はマージソートの再帰コードに取り組んでいて、スピードが急上昇しました。私はインターネットと私のアルゴリズム自体を何度も紙に書いてきましたが、問題を理解できないようです。
public static int[] mergesort(int[] data, int low, int high)
{
int middle = (high+low)/2;
if (middle==low)
{
int[] data2 = new int [1];
data2[0]=data[middle];
return data2;
}
else
{
int[] firstHalfSorted = mergesort(data, low, middle);
int[] secondHalfSorted = mergesort(data, middle+1, high);
return (merge(firstHalfSorted, secondHalfSorted));
}
}
public static int[] merge(int[] firstHalfSorted, int[] secondHalfSorted)
{
int[] SortedArray = new int[firstHalfSorted.length+secondHalfSorted.length];
int m = 0;
int n = 0;
int count = 0;
while (m<firstHalfSorted.length && n<secondHalfSorted.length)
{
if (firstHalfSorted[m]>secondHalfSorted[n])
{
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
else if (firstHalfSorted[m]<secondHalfSorted[n])
{
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (m!=firstHalfSorted.length)
{
while(m<firstHalfSorted.length){
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (n!=secondHalfSorted.length)
{
while(n<secondHalfSorted.length){
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
}
return SortedArray;
}
コードがあります。問題は、番号が3,9,7,2,10,5,1,8の順序であるテキスト入力ファイルからのものであり、コードは1つおきの番号(3,7と10,1、次に3)のみを並べ替えます。 7,1,10。
私の考えでは、3,9、7,2など、3,9,7,2、10,5,1,8などと並べ替える必要がありますが、そうではありません。ここで私を助けてくれませんか?