@{SortedArray&} {operator=(SortedArray& a)} {Allocate space large enough to hold the elements of {\em a}, then copy its contents such that order is preserved.}@ @{ContainerNode *} {insert(Item item)} {Insert {\em item} into the \SortedArray\ such that order is preserved. If this operation would extend the active range of cells beyond the current allocation, reallocate the \Array\ and recopy the elements. Note: The return type is {\em ContainerNode*} so that this method may be called from \Container\ pointers or references. However, since there is no packaging node structure in \Array,\ a NULL pointer is returned. $O(n)$}@ @{ContainerNode *} {append(Item item)} {The same as insert(Item item), except that the new item is added to the empty cell adjacent to the cell in the array's active range of largest index {\em if the operation does not violate the invariant that the elements be stored in order. Otherwise, the new item is inserted in order} $O(1)$ }@ @{Bool} {sortedQ() const} {Return TRUE. $O(1)$.}@ @{int} {search(Item)} {Search for an item in the active range of the array using binary search and return its index if it is found. Return -1 otherwise $O(\log n)$ .}@ @{Item} {min()} {The \Container\ method is redefined to take advantage of the ordered elements. $O(1)$ }@ @{Item} {max()} {The \Container\ method is redefined to take advantage of the ordered elements. $O(1)$ }@