singlepost

bsearch (C/C++) << На главную или назад  

Помогите, позжалуйста!!!
Меня интересует функция bsearch – бинарный поиск.

Структура такая:
#include<stdlib.h>
void *bsearch(const void *key, const void *buf,size_t тип, size_t size, int (*compare)(const void *,const void *));

выполняется бинарный поиск в упорядоченном массиве buf и возвращается указатель на первый элемент, соответствующий ключу key.
Для сравнения используется функция (надо написать) compare
Объявление должно выглядеть так: int compare(const void *a,const void *b)
Возвращает:
1)отрицательное – первое меньше вророго
2) 0 – равны
3) положительное – первеое больше второго
Типо вот так, если массив int:
int compare(int *a,int*b)
{
return (*a-*b);
}

Кто может написать короткую прогу, которая работает, а то у мнея все время ошибка:cannot convert from 'void *' to 'int *'
Я пытался найти в интернете, но и те проги которые там не идут…
Я пишу на Visual Studio 2005

54 ответов в теме “bsearch (C/C++)”

  1. 4
    Ирина Винокурова ответил:

    bsearch находиться в библиотеке cstdlib.h или еще точнее в search.h
    int *itemptr; – а зачем сдесь int?
    если записать
    void *itemptr;
    то все работает

  2. 3
    Алексей Боголюбский ответил:

    Как реализовать бинарный поиск я знаю, меня интересует встроенная функция bsearch (библиотека iostream или cstdlib)

    Вот пример программы, пишет ошибку:
    #include <stdlib.h>
    #include <stdio.h>
    #define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
    int numarray[] = {123, 145, 512, 627, 800, 993};
    int compare(const void *a, const void *b)
    {
    return (*(int*)a – *(int*)b);
    }
    int lookup(int key)
    {
    int *itemptr;
    itemptr = bsearch(&key, numarray, NELEMS(numarray), sizeof(int), compare);
    return (itemptr != NULL);
    }
    int main(void)
    {
    if(lookup(512))
    printf("В таблице есть элемент 512\n");
    else
    printf("В таблице нет элемента 512\n");
    return 0;
    }

  3. 2
    Ирина Винокурова ответил:

    DataType BinSearch(DataType list[], int low,int hight, DataType Key)
    {
    int mid;
    DataType midValue;
    while (low<=hight)
    {
    mid=(low+hight)/2;
    midValue=list[mid];
    if (Key==midValue)
    return mid;
    else if (Key<midValue)
    hight=mid-1;
    else low=mid+1;
    }
    return -1;
    }

    DataType – тип искомого элемента, пред его
    использованием нужно записать, например:
    typedef int DataType;

  4. 1
    Макаров Вася ответил:

    в си запрешено неявное преобразования указателейиз воид* во чтото
    используй явоное (int*)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.