From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Injected-Via-Gmane: http://gmane.org/ To: smoke-room@lists.altlinux.org From: Denis Kirienko Date: Mon, 20 Aug 2007 12:49:54 +0400 Message-ID: References: <20070820071848.GE28425@osdn.org.ua> <679044850708200053s38259ceeo72a85bbd83e42a48@mail.gmail.com> <679044850708200131w20fca834oad4c5b42de00e281@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 212.65.71.74 User-Agent: Thunderbird 2.0.0.6 (X11/20070804) In-Reply-To: <679044850708200131w20fca834oad4c5b42de00e281@mail.gmail.com> X-Enigmail-Version: 0.95.2 Sender: news Subject: Re: [room] on binary search and merge-sort algos X-BeenThere: smoke-room@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: dk@altlinux.ru, =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Id: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Aug 2007 08:50:08 -0000 Archived-At: List-Archive: Damir Shayhutdinov пишет: > Если вы условие выхода из цикла не считаете за "деление массива", > тогда третью часть можно вынести в это условие цикла. > > unsigned low = 0; > unsigned mid = 0; > unsigned high = a.length - 1; > > while (low <= high && a[mid] != key) > { > mid = (low + high) / 2; > if (a[mid] < key) > low = mid + 1; > else > high = mid - 1; > } > if (a[mid] == key) return mid; > return -(low + 1); То, что вы предлагаете - это тот же тернарный поиск, только проверка еще одного условия вынесена в условие цикла. -- Денис