I have a vector of pointers which point to a set of Critic objects. Each Critic has attributes such as UserID, First Name, Last Name, etc.
I mocked up an modified quickSort in order to sort the vector of pointers by the First Name of each Critic. The function works as intended, but only for the first few instances in the vector.
void quickSortCritics(vector<Critic*> & v, int from, int to)
{
if (from < to)
{
int middle = partition(v, from, to);
quickSortCritics(v, from, middle - 1);
quickSortCritics(v, middle + 1, from);
}
}
int partition(vector<Critic*> & v, int from, int to)
{
char pivot = (v[from]->getFirstName())[0];
int left_index = from - 1;
int right_index = to + 1;
do
{
do
{
right_index--;
} while ( (v[right_index]->getFirstName())[0] > pivot);
do
{
left_index++;
} while ( (v[left_index]->getFirstName())[0] < pivot);
if (left_index < right_index)
{
cout << "swapping " << v[left_index]->getFirstName() << " with " << v[right_index]->getFirstName() << endl;
swap(v[left_index], v[right_index]);
}
} while ( left_index < right_index );
return right_index;
}
Any suggestions?
If its not a homework, then why don’t you use
std::sortproviding a comparer as third argument?