Изменения
→Наивная реализация на массиве
Упорядоченное множество <tex>set</tex>, содержащее <tex>n</tex> элементов, можно реализовать с помощью массива <tex>elements[0..n-1]</tex>.
Рассмотрим реализацию на примере отсортированного по неубыванию возрастанию целочисленного массива.
<code>
<code>
'''func''' insert(Set<T> s, T elem):
</code>
Время выполнения {{---}} <tex>O(n)</tex>.
'''func''' delete(Set<T> s, T elem):
'''int''' i = 0 <font color=green>// Устанавливаем счетчик на первый элемент.</font color=green>
'''while''' elem != i < s.n '''&&''' s.elements[i] && i < s.n != elem <font color=green>// Ищем элемент индекс элемента elem.</font color=green> i = i + 1+
'''if''' i != s.n <font color=green>// Если элемент найден, то</font color=green>
'''for''' j = i '''to''' s.n - 2 <font color=green>// сдвигаем все элементы массива, следующие за текущимбольшие elem, на единицу влево</font color=green> s.elements[j] = s.elements[j + 1] <font color=green>// на одну позицию влево (тем самым удаляем элемент elem; последний элемент массива дублируетсяудаляется).</font color=green> '''if''' elem % 2 == 0 <font color=green>// Если удаленный элемент был четным, то</font color=green> s.even = s.even - 1 <font color=green>// уменьшаем количество четных элементов на единицу,</font color=green> '''else''' <font color=green>// в противном случае</font color=green> s.odd = s.odd - 1 <font color=green>// уменьшаем количество нечетных элементов.</font color=green> s.n = s.n - 1 <font color=green>// Уменьшаем общее число элементов массива на единицу.</font color=green>
Array.Resize(s.elements, s.n) <font color=green>// Удаляем дубликат последнего элемента.</font color=green>
</code>
=== '''search''' ===
Для нахождения результата используем бинарный поиск.
<code>
'''T''' search(Set<T> s, T elem):
</code>
Время выполнения {{---}} <tex>O(log n)</tex>.
<code>
'''T''' predecessor(Set<T> s, T elem):
'''intif''' i s.elements[0] < elem '''for''' i = 1 '''to&&''' s.elements[s.n - 1] >= elem <font color=green>// Если элемент elem существует и не равен минимальному,</font color=green> '''ifint''' elem =i = binSearch(s.elements[i] , elem) <font color=green>// Если в массиве находим елемент то ищем индекс элемента elem,</font color=green> '''return''' s.elements[i - 1] <font color=green>// то и выводим предшествующий ему элемент.</font color=green> '''else''' <font color=green>// В противном случае</font color=green> '''return''' ''null'' <font color=green>// Иначе выводим возвращаем ''null''.</font color=green>
</code>
Время выполнения {{---}} <tex>O(log n)</tex>.
<code>
'''T''' successor(Set<T> s, T elem):
'''intif''' i '''for''' i s.elements[0] <= 1 elem '''to&&''' s.elements[s.n - 1] > elem <font color=green>// Если элемент elem существует и не равен максимальному,</font color=green> '''ifint''' elem =i = binSearch(s.elements[i] , elem) <font color=green>// Если в массиве находим елемент то ищем индекс элемента elem,</font color=green> '''return''' s.elements[i + 1] <font color=green>// то и выводим следующий за ним элемент.</font color=green> '''else''' <font color=green>// В противном случае</font color=green> '''return''' ''null'' <font color=green>// Иначе выводим возвращаем ''null''.</font color=green>
</code>
Время выполнения {{---}} <tex>O(n)</tex>.