- Desired outcome:
- +-------------------+---+------------------+
- |...elements <= X...| X |...elements > X...|
- +-------------------+---+------------------+
- first...............pivot...............last
- After several iterations:
- +---+------------+-----------+-------------+
- | X |... <= X ...|... > X ...|... ? ? ? ...|
- +---+------------+-----------+-------------+
- first...........p.............k.........last
- All elements processed:
- +---+----------------+---------------------+
- | X |..... <= X .....|........ > X ........|
- +---+----------------+---------------------+
- first...............p...................last
- After swapping 1st element to pivot loc:
- +---+------------+---+---------------------+
- |..... <= X .....| X |........ > X ........|
- +---+------------+---+---------------------+
- first............pivot..................last
timesort.cc
void mergesort(Vector<string> & a, int first, int last)
{
if (first < last)
{
int middle = (first + last)/2;
mergesort(a, first, middle);
mergesort(a, middle+1, last);
merge(a, first, middle, last);
}
}
void
Shellsort(Vector<string> & a, int n) //from Weiss p 271
{
int gap, k, j; string tmp;
for (gap = n/2; gap>0; gap = gap==2 ? 1 : int(gap/2.2) )
for (k = gap; k < n; k++)
{
tmp = a[k];
for (j = k; j>=gap && tmp<a[j-gap]; j -= gap)
a[j] = a[j-gap];
a[j] = tmp;
}
}
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ --0--1--2--3--4--5--6--7--8--9-10-11-12-13-14-15-
23 34 56 25 44 73 42 26 10 16 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+ --0--1--2--3--4--5--6--7--8--9- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+ --0--1--2--3--4--5--6--7--8--9-