2013-02-10 6 views
0

C++에서 병렬 qsort를 수행하려고합니다. 나는 잘 정렬하는 숫자 배열을 가지고 있고 그 숫자로 위 또는 아래로 움직이는 병렬 2 차원 문자 배열을 원한다. 이것은 내가 지금까지 가지고있는 것이다.포인터를 사용하는 Qsort 병렬 배열

int compare (const void * a, const void * b) 
    { 
     //this is for qsort 
     return (*(int*)b - *(int*)a); 
    } 

    void sort_scores(char** myArray, int *votes) 
    { 
     qsort ((myArray, votes), 5, sizeof(int), compare); 
    } 

숫자를 정렬하지만 문자 하나를 움직이는 것이 부족하여 시간이 지나면 작동하지 않을 수 있습니다. 어떤 도움이라도 대단히 감사합니다.

+0

해결하려는 문제가 무엇인지 설명해 주시겠습니까? 당신이'std :: map' 또는 몇몇 구조체의 벡터를 사용할 수 있다는 소리입니다. – jrok

답변

0

투표 자체를 정렬하는 대신 투표 (즉, votes 배열의 각 요소에 대한 포인터의 배열)에 대한 포인터 배열을 만들고 포인터를 정렬 할 수 있습니다. 이에 따라 비교 함수를 업데이트하십시오! 이제는 int **으로 캐스팅해야하는 인수를받습니다. 새 배열을 정렬 한 후 해당 배열을 살펴본 다음 포인터 차이를 사용하여 원래 배열의 요소 색인을 가져옵니다.

+0

나는 내가 성취하려고 시도하고 있었던 나의 초기 게시물에 분명히 있는지 확실하지 않습니다. 정수 배열, 잘 정렬 및 병렬 2 차원 문자 배열에 전달할. 이것은 숙제이므로 숙제의 정신에 남아 있어야합니다. 나는 두 개의 분리 된 배열을 사용해야하며 일종의 정렬을 병렬로해야합니다. 나는 명시 적으로 클래스 객체를 사용하지 않도록 지시 받았으며 2 차원 문자 배열이어야한다. 나는 문자열 배열과 숫자 배열에 넣고 버블 정렬을하면 학습 경험의 본질을 우회 할 것이라고 생각한다. –

+1

그런 경우에 직면하게 될 주요 문제는'qsort'가이를 지원하지 않는다는 것입니다. 1) 인덱스를 정렬 할 수 있습니다 (제안한 방식 또는 다른 방식으로 - 매우 일반적인 기술이므로 충분한 정보를 얻을 수있을 것입니다). 또는 2) 교환을위한 새로운 정렬 기능을 작성하십시오. 요소를 주 배열에서 교환 할 때 병렬 배열에 추가합니다. 후자는 아마 당신이 찾고있는 것이지만, 내가 말했듯이,'qsort'가 당신에게 도움이되지 않을 것이기 때문에 당신은 정렬 함수를 써야 할 것입니다. – aaaaaa123456789