2013-05-28 2 views
-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; 
} 

이 다소 매우 느리고 나는이 속도를 향상시킬 수있는 방법을 찾고 있어요.

+3

코드를 정리하십시오. 나는 "i"가 어디에서 사용되는지를 보지 못했고 "myposition"에 대한 정의는 어디에도 없습니다. 배열의 각 "행"을 개별적으로 정렬하는 것처럼 보입니다. 표준 정렬 및 사용자 정의 반복기 유형으로 수행 할 수 있어야합니다. 그러나 무엇이 이루어지고 있는지에 대한 세부 사항없이 우리는 도울 수 없습니다. –

+1

당신이 버블 정렬을 구현 한 것처럼 보입니다. 이 [인기있는 정렬 알고리즘 목록] (http://en.wikipedia.org/wiki/Sorting_algorithm#Summaries_of_popular_sorting_algorithms)을 확인하십시오. 근본적으로 그것들은 당신이 가진 것보다 더 빠를 것입니다. – Kevin

+4

... 정말로 필요한 경우가 아니라면 자신의 정렬을 중복 작성하는 것이므로 ''을 사용해야하며 std :: sort (http://www.cplusplus.com/reference/algorithm/sort/) – IdeaHat

답변

4

매우하지 않는 한 항상 std::sort을 사용하십시오. std::sort을 사용하면 필요한 경우 사용자 고유의 정렬 기준을 제공 할 수 있으므로 사용하지 않을 이유가 거의 없습니다. 당신의 경우에는 스트라이드 반복자를 제공해야 할 수도 있지만, 간단하다.

+0

std :: sort는 가능한 경우 O (N) 스타일 정렬을 수행할까요, 아니면 O (nlog n) 버라이어티를 가져올 예정입니까? –

0

항상 최소 힙 안에 넣을 수 있습니다 (벡터에서 최소 (또는 최대) 힙을 만드는 데 평균 O (n)을 가짐). 그러면 최소 힙에서 숫자를 추출하여 각 top() + pop() 연산에 대한 O (log n) 비용. 그렇게하면 멋진 O (N log N) 비용을 얻을 수 있습니다. 항상 흥미 롭고 더 재미있는 힙을 가지고 놀 수 있습니다 (그리고 여기에 다시 게시 할 수있는 버그를 추가하십시오). 단지 사용되는 표준 : 종류 : P

아니면 표준 : 일종의 전에 말했듯을 사용하고, 다른 모든 것을 잊을 수) Btw는

: 당신의 swap2int() 함수에서, 시간을 낭비 할 필요가 없습니다 사용하지 않으려면 temp에 0을 지정하십시오. 그냥 다음으로 변경하십시오 :

int temp; 임시 = 1;

곧장 :

INT 온도 = 100;

관련 문제