sequential search binary search
divide and conquer merge sort quick sort introspective sort heap sort bucket sort
int findIndexOf(string value, string a[], int start, int end)
{
for (int i=start; i<end; ++i)
if (a[i] == value)
return i;
return -1;
}
1) find the name of the person with phone number 824-6064 2) find Klefstad's phone number
int findIndexOf(string value, string a[], int start, int end)
{
while ( start <= end )
{
int middle = (start + end + 1) / 2;
if ( value < a[middle] )
end = middle - 1;
else if ( value > a[middle] )
start = middle + 1;
else
return middle;
}
}
int findIndexOf(string value, string a[], int start, int end)
{
if ( start == end )
return start;
int middle = (start + end + 1) / 2;
if ( value < a[middle] )
return findIndexOf( value, a, start, middle - 1 );
else if ( value > a[middle] )
return findIndexOf( value, a, middle + 1, end );
else
return middle;
}
void insertionSort(string a[], int length)
{
int i, j;
for (j = 1; j < length; ++j)
{
// insert a[j] in correct spot above j
string key = a[j];
for (i = j-1; i >= 0 && a[i] > key; --i )
a[i+1] = a[i];
a[i+1] = key;
}
}
void Swap( string & i, string & j )
{
int temp = i;
i = j;
j = temp;
}
void SelectionSort( string a[], int start, int end)
{
for ( int i = start; i <= end; i++ )
Swap( a[i], a[findMinimum( a, i, end )] );
}
void MergeLists(string a[], int start, int mid, int end)
{
string first[] = arrayCopy(a, start, mid);
string second[] = arrayCopy(a, mid+1, end);
int firstI = 0;
int secondI = 0;
for (int i = start; i<=end; i++)
if (first[firstI] <= second[secondI)
a[i] = first[firstI++];
else
a[i] = second[secondI++];
}
void MergeSort( string a[], int start, int end)
{
if (start < end)
{
int mid = ( start + end ) / 2;
MergeSort( a, start, mid );
MergeSort( a, mid+1, end );
MergeLists(a, start, mid, end);
}
}
int partition(string a[], int start, int end)
{
int val = a[end]; // called the 'pivot'
int mid = start-1;
for (int i = start; i<end; i++)
if (a[i] <= val)
{
mid = mid+1;
swap(a[mid], a[i]);
}
swap(a[mid+1], a[end]);
return mid+1;
}
void QuickSort( string a[], int start, int end)
{
if (start < end)
{
int pivot = partition(a, start, end);
// partition: moves elements < a[pivot] before a[pivot]
// and moves elements > a[pivot] after a[pivot]
quickSort( a, start, pivot );
quickSort( a, pivot+1, end );
// notice no merge step, sub arrays are sorted
}
}