Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2009, 17:49   #1
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию Двоичный поиск в Turbo C++ 3.0

Двоичный поиск элемента в линейном массиве

Форумчане как организовать поиск элемента без использованиz указателей в Turbo C++ 3.0.

я пробовал в Паскале, что-то получалось. такая функция для двоичного поиска была:
Код:
 function BSearch (item: DataArray; count:integer;
                             key:DataItem):integer;
     var
       low, high, mid: integer;
       found:boolean;
     begin
       low:=1; high:=count;
       found:=false;         { не найден }
       while (low<=high) and (not found) do
       begin
         mid:=(low+high) div 2;
         if key<item[mid] then high:=mid-1
         else if key>item[mid] then low:=mid+1
         else found:=true;  { найден }
       end;
       if found then BSearch:=mid
       else BSearch:=0;  { не найден }
     end; { конец поиска }
под Turbo C++ 3.0 её "перебить" не смог. может у кого есть реализация двоичного поиска?
Xeon332 вне форума Ответить с цитированием
Старый 28.01.2009, 19:58   #2
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

я с организацией двоичного поиска не знаком, но вот пришлось столкнуться. поделитесь, плиз если есть у кого, кодом...
Xeon332 вне форума Ответить с цитированием
Старый 28.01.2009, 20:48   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

вроде как то так.
Код:
/*************************************************************************
Поиск в упорядоченной последовательности первого элемента,
не меньшего, чем T.

Параметры:
arr - упорядоченный по возрастанию массив элементов с
индексами от 0 до N-1
T - искомый элемент

Результат:
Индекс самого первого элемента, не меньшего T. В случае,
если таких элементов в массиве нет, возвращается N.
*************************************************************************/
int arrBinarySearch(int arr[n/**/],int t)//arrBinarySearch(int *arr,int t)
{
	int l = n;//длина массива ...arrlen(arr);
	int result;
	int half;
	int first = 0;
	int middle;

	while(l>0)
	{
		half = l/2;
		middle = first+half;
		if( arr[middle] < t )
		{
			first = middle+1;
			l = l-half-1;
		}
		else
		{
			l = half;
		}
	}

	if(arr[first] != t)
		result = n;//static_cast<int>(_msize(arr)/sizeof(int));
	else
		result = first;

	return result;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 29.01.2009, 04:19   #4
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

Код:
int arrBinarySearch(int arr[n/**/],int t)//arrBinarySearch(int *arr,int t) не совсем понятно вот здесь
{
	int l = n;//длина массива ...arrlen(arr);
	int result;
	int half;
	int first = 0;
	int middle;

	while(l>0)
	{
		half = l/2;
		middle = first+half;  непонял вот здесь
		if( arr[middle] < t )
		{
			first = middle+1;
			l = l-half-1;
		}
		else
		{
			l = half;
		}
	}

	if(arr[first] != t)
		result = n;//static_cast<int>(_msize(arr)/sizeof(int)); и вот здесь
	else
		result = first;

	return result;
}
компилится не хочет, ссылается на неизвестный "n", хотя он объявлен...
Xeon332 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичный поиск элемента в массиве (Си под DOS) Zid@ne Общие вопросы C/C++ 7 24.12.2008 18:07
Перевод вещественного числа в двоичный код shepelin Свободное общение 9 06.07.2008 10:00
Turbo C++ necky Общие вопросы C/C++ 3 21.03.2008 17:44
ВВести десятичное число N и вывести таблицу чисел от 1 до N и их двоичный эквивалент XpideX Общие вопросы C/C++ 5 04.01.2008 19:30
Двоичный код masterx13 Паскаль, Turbo Pascal, PascalABC.NET 4 14.11.2007 20:08