-2

我正在寻找订购 220000 * 7 * 6 的多维向量的最快方法。

我按 [x][5][y] 排序,我必须使中间 (7) 向量的所有值都跟上。

for(int i =0;i<211876;i++){
    for(int k =0;k<211876;k++){
        if(vec[k][5][myposition] < vec[k+1][5][myposition]){
            for(int n =0;n<7;n++){
            swap2int(vec[k][n][myposition],vec[k+1][n][myposition]);}
        }
    }
}

void swap2int(int &one, int& two){
    int temp=0;
    temp = one;
    one = two;
    two = temp;

    return;
}

这有点慢,我正在寻找提高速度的方法。

4

2 回答 2

4

std::sort除非您有充分理由不使用,否则请始终使用。std::sort允许您在必要时提供自己的排序标准,因此几乎没有任何理由不使用它。您可能需要在您的情况下提供一个跨步迭代器,但这些都很简单。

于 2013-05-28T20:03:43.553 回答
0

您始终可以将它们放在最小堆中(从向量创建最小(或最大)堆平均需要 O(n)),然后,您可以简单地从最小堆中以完美的顺序提取数字,使用 O(log n ) 每个 top()+pop() 操作的成本。这样,你会得到一个不错的 O(N log N) 成本,你会玩堆,这总是很有趣,并且可能比你更有趣(并添加一些让你再次在这里发帖的错误)刚刚使用 std::sort :P

或者您可以使用前面所说的 std::sort ,而忘记其他一切;)

顺便说一句:在您的 swap2int() 函数中,如果您不使用它,则无需浪费时间将 0 分配给 temp。只需将其更改为:

国际温度;温度=一;

或直接到:

国际温度=一;

于 2013-05-28T23:32:18.893 回答