2014-04-09 4 views
0

기수 정렬을 사용하여 숫자 목록을 정렬하는 프로그램에서 작업하고 있지만 무한 루프라고 생각되는 것에 계속 빠져 들었습니다. 내 주요 정렬 기능 또는 내 계산 기능 중 하나라고 생각합니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?이중 연결리스트를 사용하는 C++ 기수 정렬

void radix_sort(DLList& list) 
{ 
    DLList lstRay[10]; 
    int ct = count(list); 
    int zeros = 0; 
    int tmp = 0; 
    int head = 0; 

    for(;ct >= 0; ct--) 
    { 
     while(!list.isEmpty()) 
     { 
     head = list.deleteHead(); 
     tmp = head/pow(10, zeros); 
     tmp = tmp % 10; 
     lstRay[tmp].addToTail(head); 
     } 
     for(int x = 0; x <=9; x++) 
     { 
     list.append(lstRay[x]); 
     } 
     zeros++; 
    }  
} 

int count(DLList& list) 
{ 
    int ct = 0; 
    int ct2 = 0; 
    int tmp = 0; 

    while(!list.isEmpty()) 
    { 
     ct = ct2; 
     tmp = list.deleteHead(); 
     while(tmp >= 0) 
     { 
     tmp = tmp/10; 
     ct2++; 
     } 
     if(ct2 < ct) 
     { 
     ct2 = ct; 
     } 
    } 
    return ct2; 
} 

답변

0

각 반복마다 lstRay을 삭제하지 않아도됩니다. 즉, 다시 반복 할 때 각 lstRay이 길어지고 길어 지므로 목록이 기하 급수적으로 늘어납니다.

그러나 나는 그것이 매우 놀랍다. 카운트 기능이 목록을 지우는 것처럼 보입니다.

0

무한 루프는 count() 안에 있습니다. temp가 0 이하가되지 않으므로 temp의 루프는 종료되지 않습니다.

radix_sort 함수에도 문제가 있습니다. listRay [tmp]가 초기화되지 않았습니다.