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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2009, 12:20   #1
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
Вопрос Алгоритм поиска. Название

Вопрос чисто теоретический. Я никак не могу вспомнить название алгоритма. Смысл просто. Нам в массиве чисел нужно найти определенный элемент. Вот алгоритм. Находим центр массива. Если этот элемент меньше, то рассматриваем уже только элементы справа от него, если больше то слева. Ну а если равен, то все. И так делаем пока найдем этот элемент. Как называется этот алгоритм? Он используется не только в программирование, кстати. Вот функция работающая по этому алгоритму.

Код:
int qs(int *mas,int size,int n){
	int middle,right=size-1,left=0;
	while(left<=right){
		middle=(right+left)/2+1;
		if(left==right){
			if(mas[middle]==n){return middle;}
			else{return -1;}
		}else{
			if(mas[middle]>n){right=middle;}
			if(mas[middle]<n){left=middle;}
		}
	}
	return -1;
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 17.05.2009, 12:22   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Бинарный поиск?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 12:39   #3
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

Вряд ли. Там в названии всего этого процесса была буква Х. Я в гугле поискал, но так пока ничег не нашел. Там только алгоритм хемминга, хафмана.
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 17.05.2009, 12:48   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

http://ru.wikipedia.org/wiki/Двоичный_поиск
http://algolist.manual.ru/search/bin_search.php

По описанию и приведенному вами примеру - вылитый он.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 12:58   #5
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

ВОТ! Точно дихотомия. Ну буква х в нем есть Спасибо огромное! Не знал, что он так называется.
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 17.05.2009, 13:01   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да уж, буква 'х' действительно есть ))
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 13:08   #7
Nomlpppp
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 51
По умолчанию

Судя по названию функции "qs" скорее всего quick sort - быстрая сортировка. Работает по методу Шелла. Действительно работает по принципу разбиения массива на части. За опорный может ьраться и из середины. Может об нем речь?
Nomlpppp вне форума Ответить с цитированием
Старый 17.05.2009, 13:14   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Nomlpppp, да не, это обычный двоичный поиск )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 13:18   #9
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

qs, это первое название, пришедшее ко мне в голову.

Кстати, на счет самой реализации. Она криво работает. Посмотрите:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void sort_vib(int *mas,int size);
int qs(int *mas,int size,int n);

int main(){
	int i,a[100],n,ch;
	srand(time(0));
	scanf("%d %d",&n,&ch);
	for(i=0;i<n;i++){
		a[i]=rand()%10;
	}
	for(i=0;i<n;i++){
		printf("%5d",a[i]);
	}
	printf("\n");
	sort_vib(a,n);
	printf("\n%d\n",qs(a,n,ch));
	return 0;
}

int qs(int *mas,int size,int n){
	int middle,right=size-1,left=0;
	while(left<=right){
		middle=(right+left)/2+1;
		if(left==right){
			if(mas[middle]==n){return middle;}
			else{return -1;}
		}else{
			if(mas[middle]>n){right=middle-1;}
			if(mas[middle]<n){left=middle+1;}
		}
	}
	return -1;
}

void sort_vib(int *mas,int size){
	int i,j,max,maxc=0,tmp;
	for(i=size-1;i>0;i--){
		max=mas[0];
		maxc=0;
		for(j=0;j<=i;j++){
			if(mas[j]>max){
				maxc=j;
				max=mas[j];
			}
		}
		tmp=mas[i];
		mas[i]=mas[maxc];
		mas[maxc]=tmp;
	}
	for(i=0;i<size;i++){
		printf("%5d",mas[i]);
	}
	return;
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 17.05.2009 в 13:22.
MAKEDON вне форума Ответить с цитированием
Старый 17.05.2009, 13:35   #10
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

Вот немного переделал. Но все равно некоторые варианты не ищет. В чем проблема?

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void sort_vib(int *mas,int size);
int qs(int *mas,int size,int n);

int main(){
	int i,a[100],n,ch;
	srand(time(0));
	scanf("%d %d",&n,&ch);
	for(i=0;i<n;i++){
		a[i]=rand()%100;
	}
	for(i=0;i<n;i++){
		printf("%5d",a[i]);
	}
	printf("\n");
	sort_vib(a,n);
	printf("\n%d\n",qs(a,n,ch));
	return 0;
}

int qs(int *mas,int size,int n){
	int middle,right=size-1,left=0;
	while(right-left>1){
		middle=(right+left)/2;
		if(mas[middle]<n){left=middle;}
		else{right=middle;}
	}
	if(mas[middle]!=n){return -1;}
	else{return right;}
}

void sort_vib(int *mas,int size){
	int i,j,max,maxc=0,tmp;
	for(i=size-1;i>0;i--){
		max=mas[0];
		maxc=0;
		for(j=0;j<=i;j++){
			if(mas[j]>max){
				maxc=j;
				max=mas[j];
			}
		}
		tmp=mas[i];
		mas[i]=mas[maxc];
		mas[maxc]=tmp;
	}
	for(i=0;i<size;i++){
		printf("%5d",mas[i]);
	}
	return;
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Волновой алгоритм поиска Merkator Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 12.02.2009 16:15
Алгоритм поиска значений в памяти. Ivan_32 Win Api 2 07.11.2008 19:59
Алгоритм поиска... Johnson Общие вопросы Delphi 1 26.10.2008 08:35
Алгоритм поиска HEX строки в файле Vlad_3310 Общие вопросы Delphi 8 17.06.2008 10:02