기수정렬 잘안됩니다 도와주세요!!!

nayana의 이미지

#include <stdio.h>

#define N 100

unsigned bits( unsigned x, int k, int j );
void radix_exchange_sort( int a[], int n, int b );

int main ( void )
{
    int i, n, score[N];
    printf("Number of data?\t");
    scanf("%d", &n);
    
    for ( i = 0; i < n; i++ )
	  {
 	      printf("score[%d] = ", i );
	      scanf("%d", &score[i]);
	  }

    radix_exchange_sort( score, n, 31 );

    for ( i = 0; i < n; i++ )
	      printf("(%d)\t %d\n", i + 1, score[i]);

    return 0;
}

unsigned bits( unsigned x, int k, int j )
{
    return ( x >> k ) & ~( ~0 << j );
}

void radix_exchange_sort( int a[], int n, int b )
{
    int t, i, j;
    if ( n > 1 && b >= 0 )/*!종료조건*/
    {
	      i = 0;    /* i는 첫 레코드*/
	      j = n - 1;/* j는 마지막 레코드*/
	      while( 1 )/*분할*/
		  {
		      while ( bits( a[i], b, 1 ) == 0 && i < j )   i++;/*검색*/
		      while ( bits( a[j], b, 1 ) == 0 && i < j )   j--;

		      if( i >= j ) break;/*i 와 j 가 같아지면 끝이다.*/
		      t = a[i];/* i 와 j 요소를 교환한다.*/
		      a[i] = a[j];
		      a[j] = t;
		  }

	      if ( bits( a[n - 1], b, 1 ) == 0 ) j++;/* 리스트가 모두 0인경우*/
	      radix_exchange_sort( a, j, b - 1 );    /* 다음 비트와 분할에 대해 재귀*/
	      radix_exchange_sort( a + j, n - j, b - 1 );
    }
    
}	    

책을 보면서 따라하기식으로 알고리즘을 공부하고 있는데...
잘안되네요....무엇이 문제인지...감이 잘안잡힙니다..
무지해서...질문만 올리게 됩니다.