Помогите, позжалуйста!!!
Меня интересует функция 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
27 декабря 2008 в 15:02
bsearch находиться в библиотеке cstdlib.h или еще точнее в search.h
int *itemptr; – а зачем сдесь int?
если записать
void *itemptr;
то все работает
27 декабря 2008 в 12:05
Как реализовать бинарный поиск я знаю, меня интересует встроенная функция 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;
}
26 декабря 2008 в 17:01
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;
25 декабря 2008 в 20:01
в си запрешено неявное преобразования указателейиз воид* во чтото
используй явоное (int*)