これら 2 つのアルゴリズムを組み合わせるのに問題があります。Binary Search
要素を配列に挿入する必要があるインデックスを返すように変更するように依頼されました。Binary Insertion Sort
次に、 myBinary Search
を使用してランダムに生成された の配列をソートするを実装するように依頼されましたints
。
私Binary Search
の作品は想定どおりに動作し、単独でテストするたびに正しいインデックスを返します。私はBinary Insertion Sort
それがどのように機能するかの感触をつかむために書き、それも機能するようにしました. 2つを組み合わせるとすぐに壊れます。それらを一緒に間違って実装していることはわかっていますが、問題がどこにあるのかわかりません。
これが私が持っているものです:
public class Assignment3
{
public static void main(String[] args)
{
int[] binary = { 1, 7, 4, 9, 10, 2, 6, 12, 3, 8, 5 };
ModifiedBinaryInsertionSort(binary);
}
static int ModifiedBinarySearch(int[] theArray, int theElement)
{
int leftIndex = 0;
int rightIndex = theArray.length - 1;
int middleIndex = 0;
while(leftIndex <= rightIndex)
{
middleIndex = (leftIndex + rightIndex) / 2;
if (theElement == theArray[middleIndex])
return middleIndex;
else if (theElement < theArray[middleIndex])
rightIndex = middleIndex - 1;
else
leftIndex = middleIndex + 1;
}
return middleIndex - 1;
}
static void ModifiedBinaryInsertionSort(int[] theArray)
{
int i = 0;
int[] returnArray = new int[theArray.length + 1];
for(i = 0; i < theArray.length; i++)
{
returnArray[ModifiedBinarySearch(theArray, theArray[i])] = theArray[i];
}
for(i = 0; i < theArray.length; i++)
{
System.out.print(returnArray[i] + " ");
}
}
}
これを実行したときに得られる戻り値は です1 0 0 0 0 2 0 0 3 5 12
。助言がありますか?
更新: ModifiedBinaryInsertionSort を更新しました
static void ModifiedBinaryInsertionSort(int[] theArray)
{
int index = 0;
int element = 0;
int[] returnArray = new int[theArray.length];
for (int i = 1; i < theArray.lenght - 1; i++)
{
element = theArray[i];
index = ModifiedBinarySearch(theArray, 0, i, element);
returnArray[i] = element;
while (index >= 0 && theArray[index] > element)
{
theArray[index + 1] = theArray[index];
index = index - 1;
}
returnArray[index + 1] = element;
}
}