【发布时间】:2011-09-02 03:22:48
【问题描述】:
我有一个指向一组 Critic 对象的指针向量。每个 Critic 都有 UserID、First Name、Last Name 等属性。
我模拟了一个修改过的 quickSort,以便按每个 Critic 的名字对指针向量进行排序。该函数按预期工作,但仅适用于向量中的前几个实例。
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;
}
有什么建议吗?
【问题讨论】:
-
是的。不要自己实现排序。使用现有的实现。 STL 有 sort()。你可以在网上找到无数的快速排序实现。
-
我的建议是使用带有自定义比较功能的
std::sort。您不能这样做有什么特别的原因吗?
标签: c++ sorting pointers vector quicksort