Java Reference
In-Depth Information
We have presented the Model-View-Controller pattern as if the user is the Controller,
primarily to simplify the examples. The Controller need not be under the direct control
of the user, but could be some other kind of software or hardware component.
EXAMPLE: A Sorting Pattern
The most efficient sorting algorithms all seem to follow a similar pattern. Expressed
recursively, they divide the list of elements to be sorted into two smaller lists,
recursively sort the two smaller lists, and then recombine the two sorted lists to
obtain the final sorted list. In Display 12.5, this pattern is expressed as pseudocode
(in fact, almost correct Java code) for a method to sort an array into increasing order
using the < operator .
Our sorting pattern uses a divide-and-conquer strategy. It divides the entire
collection of elements to be sorted into two smaller collections, sorts the smaller
collections by recursive calls, and then combines the two sorted collections to obtain
the final sorted array. The following is the heart of our sorting pattern:
int splitPoint = split(a, begin, end);
sort(a, begin, splitPoint);
sort(a, splitPoint + 1, end);
join(a, begin, splitPoint, end);
Although the pattern does impose some minimum requirements on the methods
split and join , it does not say exactly how the methods split and join are defined.
Different definitions of split and join will yield different sorting algorithms.
The method split rearranges the elements in the interval a[begin] through
a[end] and divides the rearranged interval at a split point, splitPoint . The two
smaller intervals a[begin] through a[splitPoint] and [splitPoint + 1] through
a[end] are then sorted by a recursive call to the method sort . Note that the split
method both rearranges the elements in the array interval a[begin] through a[end]
and returns the index splitPoint that divides the interval. After the two smaller
intervals are sorted, the method join then combines the two sorted intervals to
obtain the final sorted version of the entire larger interval.
The pattern says nothing about how the method split rearranges and divides the
interval a[begin] through a[end] . In a simple case, split might simply choose a
value splitPoint between begin and end and divide the interval into the points
before splitPoint and the points after splitPoint , with no rearranging. Display 12.6
realizes the sorting pattern by defining split this way. On the other hand, the method
split could do something more elaborate such as move all the “small” elements to the
front of the array and all the “large” elements toward the end of the array. This would be
a step on the way to fully sorting the values. We will also see an example in Display 12.8
that realizes the sorting pattern in this second way.
(continued)
 
Search WWH ::




Custom Search