按奇偶校验排序数组结果不可靠

Liu*_*ohn 0 c++

我是一名新程序员,我正在尝试按奇偶校验对整数向量进行排序-将偶数放在赔率前。奇数或偶数内部的顺序本身并不重要。例如,给定输入[3,1,2,4],输出可以是[2,4,3,1]或[4,2,1,3],以此类推。下面是我的c ++代码,有时我幸运的是,向量得到了正确的排序,有时却没有。我导出了奇数和偶数向量,它们看起来正确,但是当我尝试将它们组合在一起时,结果就一团糟。有人可以帮我调试吗?

class Solution {
public:
    vector<int> sortArrayByParity(vector<int>& A) {
        unordered_multiset<int> even;
        unordered_multiset<int> odd;
        vector<int> result(A.size());

        for(int C:A)
        {
            if(C%2 == 0)
                even.insert(C);
            else
                odd.insert(C);
        }
        merge(even.begin(),even.end(),odd.begin(),odd.end(),result.begin());
        return result;
    }
};
Run Code Online (Sandbox Code Playgroud)

Bla*_*ace 5

如果您只需要在赔率前加上偶数而不是完整的排序,建议您使用std::partition。您给它两个迭代器和一个谓词。谓词返回的元素true将在其他元素之前出现。它可以就地工作,并且应该非常快。

像这样:

std::vector<int> sortArrayByParity(std::vector<int>& A)
{
    std::partition(A.begin(), A.end(), [](int value) { return value % 2 == 0; });
    return A;
}
Run Code Online (Sandbox Code Playgroud)