1索引数组上的qsort()正在搞乱索引

时间:2015-03-24 22:39:40

标签: c++ arrays sorting quicksort

我使用的是1索引数组,我试图按利润/价格比率进行排序。我写了一个比较函数,它一切正常,但是它将第一个元素放在索引0中。我只是将元素移动过来,但是数组非常大,这会增加很多时间复杂性

有没有人知道一种与这种类型的数组兼容的类型?在哪里我可以指定数组的开头?

我尝试使用以下

qsort(problemCards+sizeof(Card), problemBank[i].getNumCards(), sizeof(Card), compare);

但是我对其中一个比较函数的调用出了算术错误....

我真的想避免为此编写自己的排序,所以任何帮助都会非常感谢,谢谢!

1 个答案:

答案 0 :(得分:2)

以下是如何使用您的数据调用std::sort

bool card_less( const Card& lhs, const Char& rhs ) {
  return compare(&lhs, &rhs)<0;
}

Card* start = problemCards+1;
Card* end = start + problemBank[i].getNumCards();
std::sort( start, end, card_less );

这假设compare是一个自由函数,需要两个Card const*。我们将card_less定义为另一个使用compare告诉您lhs是否小于rhs的自由函数。