Quicksort通过特定成员C++对对象数组进行排序

Ric*_*ich 2 c++ object quicksort

class Foo
{
    public:
        int num;
        int other;
};

int main()
{
    Foo bar[10].num = {1, 9, 3, 5, 1, 6, 10, 0, 6, 3};

    //quicksort(bar)

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想写一个quicksort函数,用'num'升序命令'bar'数组.不太清楚什么是最好的方法,因为我从来没有写过快速排序.我查看了一些示例代码,但在这种情况下我无法看到如何修改它们.通过将指针传递给数组的第一个和最后一个元素来完成的就地排序不起作用,因为这只排序'num'成员,而不是整个对象.将对象数组拆分为较低的数组,一个数据透视图和一个上部数组,并递归排序每个看起来很有希望,但我不确定如何传递值将起作用...

任何帮助非常感谢.对不起,如果之前有人询问过.

Ben*_*ley 10

首先,您编写一个函数(或函子)来比较您想要的任何值的对象.它应该采取两个对象并返回一个布尔.如果第一个应该在第二个之前,它应该返回true,否则返回false.然后将其传递给std :: sort.

struct compare_Foo_by_num
{
    bool operator() (const Foo & lhs, const Foo & rhs) { return lhs.num < rhs.num; }
};

int main()
{
    Foo bar[10];

    std::sort(bar, bar+10, compare_Foo_by_num());
}
Run Code Online (Sandbox Code Playgroud)

  • @Rich:除了教育目的,写自己的快速入口是个坏主意 (2认同)