Мой метод insertInOrder неверен (он распечатывает список чисел назад). Я читаю список чисел, и я хочу использовать алгоритм сортировки вставки для сортировки чисел в порядке возрастания, используя позицию индекса двоичного поиска. Я не уверен, как это сделать, и помощь будет очень оценена.Двоичный поиск и вставка сортировки
static void insertInOrder(int[] arr, int cnt, int newVal) {
int index = bSearch(arr, 0, arr.length-1, newVal) ;
if (index < 0) {
index = -1 - index ;
}
for (int i = cnt; i >= index+1 ; --i) {
arr[i] = arr[i-1];
}
arr[index] = newVal;
}
public static int bSearch(int[] a, int lo, int hi, int key) {
int mid = (lo+hi)/2;
if(lo>hi)
return -1;
else if (a[mid]==key)
return mid;
else if (a[mid]<key)
return bSearch(a, mid+1, hi, key);
else
return bSearch(a, lo, mid-1, key);
}
Reading in: 5 13 7 9 21
Current Output: 21 9 7 13 5
Desired Output: 5 7 9 13 21
Это insertInOrder в мой главный
int[] arr = new int[INITIAL_CAP];
int arrCnt= 0;
while (infile.hasNextInt())
{
if (arrCnt==arr.length)
arr = doubleMyLength(arr);
insertInOrder(arr, arrCnt, infile.nextInt());
++arrCnt;
}
infile.close();
arr = trimMyLength(arr, arrCnt);
System.out.println("Sorted array of " + arr.length + " ints from " + args[0] + " after insert in order:");
printArray(arr); // we trimmed it so count == length so we don't bother to pass in count
Вы можете только сделать бинарный поиск в уже отсортированный массив. – halex
Просьба показать некоторые примеры того, как вызывается 'insertInOrder (i [], i, i)'. – aliteralmind
Я читаю цифры по одному, но я хочу использовать двоичный поиск, чтобы найти индекс вставки для следующего входящего номера. – user3287300