订购巨幅矢量的最快方式?

时间:2013-05-28 19:38:29

标签: c++ algorithm optimization vector

我正在寻找订购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;
}

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

或者你可以像之前说的那样使用std :: sort,并忘记其他一切;)

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

int temp; 温度=之一;

或直接:

int temp = one;