我無法將這兩種算法組合在一起。我被要求修改Binary Search
以返回元素應該插入到數組中的索引。然後我被要求執行一個Binary Insertion Sort
,它使用我的Binary Search
對隨機生成的ints
的數組進行排序。在Java中使用二進制搜索實現二進制插入排序
我Binary Search
我的Binary Search
工作方式,每當我單獨測試時返回正確的索引。我寫出了Binary Insertion Sort
來感受它是如何工作的,並讓它工作。只要我將兩者結合在一起,就會破裂。我知道我在一起執行它們的方式不正確,但我不確定我的問題在哪裏。
下面是我得到了什麼:
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;
}
}
這幫助我找出了我的一個主要問題。我沒有使用適當的「二進制插入排序」算法。現在我只需要弄清楚在哪裏插入我的二進制搜索,我應該很好。謝謝。 – MacSalty
@匿名你可以發佈你的更新代碼嗎?您應該在returnArray上執行二分搜索,即'ModifiedBinarySearch(returnArray,startOfArray,endOfArray,theArray [i])'(包括Patashu的建議更新)。 – beaker
@Beaker張貼。但它仍然不起作用,所以我會看看我今天能做些什麼。 – MacSalty