2017-12-02 7 views
-2

정수의 배열을 취하여 기본 16 8 10과 2로 정렬하는 프로그램을 작성 중입니다. 제 함수는 2를 제외한 모든베이스에서 작동합니다. 숫자를 올바르게 정렬하지 않습니다. 나는 주변을 둘러 보았고 어떤 곳도 그 문제를 특별히 설명하지 못했다. 나는 메신저 (>> < <)를 사용하기로되어 있다고 생각하지만 정확히 어떻게 모를까? 당신은 아직도 당신이이 개 지점에 구현에 기반 열에서 작업하고 있다는 사실을 하드 코딩 한기수 2에 대해 기수 정렬 기능이 작동하지 않습니까?

void Sortfunc(int myarray[], int n, int base){ 

queue<int> bins[10]; 
int MAX=4; // max digits 
int COUNTER=0;// position of counter 

while (COUNTER < MAX) { 
    for(int i=0; i<n; i++){// sorts array by digit 
     int dividor=pow(base,COUNTER); 
     int temp = myarray[i]; 
     int value = static_cast<int>((temp/dividor)%10); //gets the decimal 
     bins[value].push(temp); 
    } 
+0

코드를 보지 않고도 많은 조언을 드릴 수 있다고 생각하지 않습니다. 당신이 가진 것을 게시 할 수 있습니까? – templatetypedef

+0

내가 얻는 오류는 내가베이스 2를 입력했을 때 배열이 올바르게 정렬되지 않는다는 것입니다. 다른 모든베이스에서는 잘 작동합니다. – G3Spin

+0

'std :: sort'를 사용하지 않을 이유가 있습니까? –

답변

0

주의 :

queue<int> bins[10]; // <--- Here 
int MAX=4; 
int COUNTER=0; 

while (COUNTER < MAX) { 
    for(int i=0; i<n; i++){ 
     int dividor=pow(base,COUNTER); 
     int temp = myarray[i]; 
     int value = static_cast<int>((temp/dividor)%10); // <--- Here 
     bins[value].push(temp); 
    } 

이것은 당신이 시도 할 경우에도이 기준을 변경하는 것을 의미한다 , 사용자가 제공 한 기반을 사용하여 반드시 정렬 할 필요는 없습니다.

또한 여기서는 pow을 사용하지 않는 것이 좋습니다. 부동 소수점 계산은 본질적으로 정확하지 않으며 오류 마진 여유가없는 이러한 경우에는 계산을 통해 정수 값을 사용하는 것이 좋습니다.