Почему не работает метод двоичного поиска, если массив отсортирован в порядке убывания?

Отправка формы без перезагрузки страницы и получение результата отправленных данных на той же странице

Вот некоторые из кода, который я нашел в Интернете, который решает эту проблему

Индексный файл:

   
    
    

server_action.php


Теги:

0
задан Indrajith Ekanayake 19 March 2019 в 03:35
поделиться

2 ответа

Вы пытаетесь binary search отсортировать массив по возрастанию в отсортированном порядке по убыванию. Измените method header и тело метода следующим образом:

int ans = binarySearch(userInput, 0, Size, 10,order);  // order you got from user 

Теперь этот Binary search будет работать как в порядке возрастания, так и в порядке убывания массива:

    static int binarySearch(int[] array, int left, int right, int key,int sorting) 
    {
        if (left > right) 
        {
          return -1;
        }

        int mid = (left + right) / 2;

        if (array[mid] == key) 
        {
          return mid;
        }

        if(sorting == 2)   // if array is sorted in descending order
        {
            if (array[mid] > key) 
            {
              return binarySearch(array, mid+1, right, key,sorting );
            }
            return binarySearch(array, left, mid-1, key,sorting );
        }
        else // if array is sorted in ascnending order
        {
            if (array[mid] > key) 
            {
                return binarySearch(array, left, mid - 1, key,sorting );
            }

            return binarySearch(array, mid + 1, right, key,sorting );
        }
    }
0
ответ дан Zain Arshad 19 March 2019 в 03:35
поделиться

Проблема в том, что вам нужно искать в верхней половине, если ключ меньше, чем средний элемент. Еще поиск в нижней половине.

static int binarySearch(int[] array, int left, int right, int key) {
    if (left > right) {
      return -1;
    }

    int mid = (left + right) / 2;

    if (array[mid] == key) {
      return mid;
    }

    if (array[mid] > key) {
      return binarySearch(array, mid + 1, right, key);
    }

    return binarySearch(array, left, mid - 1, key);
  }
0
ответ дан samzz 19 March 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: