기수 교환 정렬
글쓴이: nayana / 작성시간: 금, 2004/05/07 - 3:32오후
#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;
j = n - 1;
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;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
if ( bits( a[n - 1], b, 1 ) == 0 ) j++;
radix_exchange_sort( a, j, b - 1 );
radix_exchange_sort( a + j, n - j, b - 1 );
}
나름대로 기수 교환 알고리즘을 짜봤는데...락이 걸려버립니다.
어디서 락이 걸리는지는 알겠는데...정렬을 어떻게 시켜할지 의문입니다.
Forums:


댓글 달기