radix sort
해나
질문 제목 : 기수정렬
n개의 데이터를 입력받아서 기수정렬하는 프로그램인데 정렬된 값이 틀리게나오네요..
return (x k) & ~(~0 j); -이것의 뜻 좀 알려주세요..
void radix_sort(int A[],int n,int b) -여기에서 int b는 무엇을 의미하는지 가르쳐주세요
질문 내용 :
#include stdio.h
#include stdlib.h
#include time.h
void radix_sort(int a[],int n,int b);
unsigned bits(unsigned x,int k,int j);
int main(void)
{
int i,n,*A;
printf(n=);
scanf(%d,&n);
srand(time(NULL));
A=(int *)malloc(sizeof(int)*n);
printf(정렬 전\n);
for(i=0; in; i++)
{
A[i]= rand() % 10000;
printf(%8d, A[i]);
}
radix_sort(A, n, 2);
printf(정렬후\n);
for(i=0; in; i++)
printf(%8d, A[i]);
}
unsigned bits(unsigned x,int k,int j)
{
return (x k) & ~(~0 j);
}
void radix_sort(int A[],int n,int b)
{
int t,i,j;
if(n1 && b=0)
{
i=0;
j=n-1;
while(1)
{
while(bits(A[i],b,1) == 0 && ij) i++;
while(bits(A[j],b,1) != 0 && ij) 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_sort(A,j,b-1);
radix_sort(A+j,n-j,b-1);
}
}
-
장난감
~(~0 j)
~연산자는 NOT 연산자입니다. ~0011 == 1100입니다. 0과 1을 단순히 역상시키는 것이죠.
~0은 1입니다. 그런데 상수 0은 int형의 값 0입니다. int가 32비트라고 할 때 00000000 00000000 00000000 00000000이고 ~0은 11111111 11111111 11111111 11111111입니다.
j가 3이라고 하면 ~0 j의 값은 11111111 11111111 11111111 11111000