Я пытался понять это весь день и не могу заставить его работать. Почему мой двоичного поиска работы, если я ввод длину массива вручную, но когда я поменять ручной ввод для:Binary Search Int Array Size Issue
int max = sizeof(list)/sizeof(list[0]);
это не похоже на работу. Например, если я попытаюсь найти 2 в массиве из 11 элементов из 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, он не сможет найти 2. Но если я изменю int min = 11. Он может найти 2. Вот функция бинарная сортировка:
int binarysearch(int *list, int sfor)
int min = 0;
int max = 10;
int mid = (min + max)/2;
while(min <= max)
{
if (sfor == list[mid])
{
printf("The number you are searching for is in %i place \n", mid + 1);
return 0;
}
else if (sfor < list[mid])
{
max = mid - 1;
}
else
{
min = mid + 1;
}
mid = (min + max)/2;
}
printf("Could not find number! \n");
return 1;
int main(int argc, string argv[]) // number searching for is passed through
{ // command line argument
printf("How many numbers did you want to search through? \n");
int a = GetInt(); //int a is how big should the array of numbers be
printf("What are they: \n");
int i = 0;
int b[a];
for (i = 0; i < a; i++)
{
b[i] = GetInt(); //cycles though each int of the array
}
int x = atoi(argv[1]); //converts command line argument to an int
binarysearch(b, x);
}
будет очень признателен за любую помощь.
Как определить "список"? 'int * list;'? –
Научитесь отлаживать свой код. Распечатайте значение min и проверьте правильность или нет. – user31264
Когда я отлаживаю свой код, он говорит max = 2, но если длина массива равна 11, то как int max = sizeof (list)/sizeof (list [0]); получить 2? –