기수정렬 잘안됩니다 도와주세요!!!
글쓴이: nayana / 작성시간: 목, 2004/05/13 - 9:43오전
#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 );
}
} 책을 보면서 따라하기식으로 알고리즘을 공부하고 있는데...
잘안되네요....무엇이 문제인지...감이 잘안잡힙니다..
무지해서...질문만 올리게 됩니다.
Forums:


댓글 달기