기수 교환 정렬
글쓴이: 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:
댓글 달기