В разработката на софтуер навсякъде се използват масиви. "Интелигентните" типове данни в съвременните езици за програмиране, като например динамични масиви, предоставят големи възможности за удобна работа с обекти. Но алгоритмите, лежащи в основата на работата с тези типове данни, които са разработени в зората на компютърните науки - в средата на двадесети век. Първият алгоритъм за двоично търсене е публикуван през 1946 година. Разгледайте най-популярните алгоритми за работа с масиви.
Последователно търсене
Индекс-последователно търсене
Двоично търсене
Препълване на избрания тип данни
средата на масива = лява стойност + (лява стойност - стойност на дясно) /2
По време на операцията по добавяне съществува опасност от препълване на типа данни. Ако масивът е толкова голям по размер, трябва да използвате различни техники, за да избегнете риска. По-долу са описани стандартни грешки при проектирането на двоични търсения.
Грешки на стойностите
Или грешки на единица. Много е важно да се разгледат следните възможности:
- Празен масив.
- Няма стойност.
- Превишаване на масива.
Множество копия
Следва да се отбележи, чеВ случай на съществуване на няколко идентични екземпляра на ключ в масив, програмата трябва да намери определено (първо, последно, следващо).
& lt; script type = "text /javascript" & gt;
може да blockSettings2 = {blockId: "R-A-271049-5", renderTo: "yandex_rtb_R-A-70350-39", async:! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този.документ," yandexContextAsyncCallbacks ");
Да разгледаме реализацията на този алгоритъм в програмния език C plus plus. Моля, обърнете внимание, че двоичното търсене работи само с подреден масив! Ако масивът не е предварително сортиран, резултатът от изчисленията ще бъде неправилен.
Следното е код на C ++. Първоначално, първоначално се инициализира масив от цели числа arr, размер десет. След това операторът cin в цикъла изчаква въвеждането на десет стойности от потребителя (ред 10).
В двадесетата линия програмата очаква потребителят да въведе ключовата стойност.
Редове 29 - 35 представляват прилагания алгоритъм на двоично търсене. По време на изпълнението на програмата в средната променлива, стойността на средния елемент се записва, както следва:
Средна стойност на масива (средата) = (лява стойност (l) + дясна стойност (r)) /2
Ред
arr [mid] == ключ
Проверява се дали средната стойност е ключовата стойност. Ако една, стойността на флага на флага се променя на TRUE, т.е. проблемът е решен. Ако средната стойност е по-голяма от стойността на нашия ключ, тогава дясната страна (променлива r) се присвоява на средата. акоНапротив, средата се поставя в r. Последният проверява флага на булев флаг.