Я должен создать два метода: Первый метод bSearch - это алгоритм двоичного поиска. Второй метод, insertInOrder, должен взять индекс, полученный из метода bSearch, и найти этот индекс в массиве, открыть пятно в этом индексе, сдвинув все остальные элементы этого массива и вставить ключ/int в этот индекс.Использование двоичного поиска для открытия пробела в массиве с правильным индексом
Эти данные будут получены из текстового файла, содержащего 25 целых чисел. Я не делаю никаких копий или дополнительных массивов, чтобы сделать это, и я должен кодировать и затем декодировать индекс в методе insertInOrder. В этих методах ключ будет текущим int, считываемым из файла int, и count будет подсчитывать количество полученных int. Я в основном создаю свой собственный метод сортировки, я не могу вызывать какие-либо внешние методы, и массив не должен быть в порядке в любое время.
Я заполнил эти методы, но я неловко понимаю. Я думаю, что моя проблема в том, что в методе bSearch, потому что я не могу заставить его возвращать что-либо, кроме 0. Я не могу заставить его вернуть новое значение mid, которое является индексом, где ключ/int должен быть вставлен. Чем ты за свою помощь. Код ниже:
static void insertInOrder(int[] arr, int count, int key )
{
int index=bSearch(arr, count, key);
int encodedIndex = -(index+1);
int decodedIndex = -(index+1);
for (int i = index; i > 0; i--)
{
arr[i] = arr[i-1];
}
arr[index]=key;
}
static int bSearch(int[] a, int count, int key)
{
int lo = 0;
int hi = a.length-1;
int index = 0;
boolean found = false;
while (!found && lo <= hi)
{
int mid = lo + ((hi - lo)/2);
if (a[mid] == key)
{
found = true;
index = mid;
}
else if (a[mid] > key)
{
hi = mid -1;
}
else
{
lo = mid +1;
}
}
return index;
}
Благодарим за помощь, я все понял. Мои начальные и конечные точки в методе insertInOrder отключены, и ваше исправление в моем методе bSearch помогло мне многое. –