Показать сообщение отдельно

  #2  
Старый 10.01.2010, 19:13
cupper
Постоянный
Регистрация: 06.06.2007
Сообщений: 575
Провел на форуме:
1180737

Репутация: 180


По умолчанию

ну бинарный поиск работает только при упорядоченном массиве, после прогулки на улице, написал вот это
Код:
int bin_find_mm(int *, int, int ,int, int);
/*
* Рекурсивная функция поиска позиции q, такой что
* A[q-1] < x < A[q]
* возвращает q
*/

int main(){
	int mas[7]={1,4,6,7,10,16,23};
	cout<<bin_find_mm(mas, 0, 6, 24, 7)<<endl;
}

int bin_find_mm(int *A, int p, int r, int x, int minq){
	int temp = minq;
	if (p <= r){
		int q = (p+r)/2;
		if (x < A[q])
			temp = bin_find_mm(A, p, q-1, x, q);
		else if (x > A[q])
			temp = bin_find_mm(A, q+1, r, x, minq);
		else
			return q;
	}
	if (temp < minq)
		return temp;
	else
		return minq;
	
}
проверил несколько раз, на листочке посчитал ручками, вроде работает. Может можно лучше сделать ?
 
Ответить с цитированием