void sort(int *arr, int len)
{
void swap(int i, int j)
{
int t = arr[i] ; arr[i] = arr[j] ; arr[j] = t ; return ;
}
int pivt = arr[len], i = 0, j = len-1 ;
if (len-- < 2) { return ; }
while (i < j)
{
while (arr[i] < pivt && i < len) { i++ ; }
while (arr[j] > pivt && j > 0 ) { j-- ; }
if (i < j) { swap(i,j) ; }
}
while (arr[j] < pivt) { j++; }
swap(j,len) ; sort(arr, j) ; sort(arr+j+1, len-j) ;
return ;
}
void print_mem( void *arr , size_t siz )
{
size_t i ;
unsigned char *ptr = (unsigned char *)arr ;
for ( i = 0 ; i < siz ; i++ )
{
printf("%02hhX", *(ptr+i)) ;
}
putchar('\n') ;
return ;
}
int main()
{
int a[10] ;
printf("Provide ten comma separated input integers.\n") ;
while (1)
{
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",a,a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9) ;
printf("I: ") ; print_mem(a,10*sizeof(int)) ;
sort(a, 10) ;
printf("0: ") ; print_mem(a,10*sizeof(int)) ;
}
return 0;
}
void sort(int *arr, int len)
{
void rsort(int *arr, int len, int rad)
{
if (len < 2 || rad < 0) { return ; }
void swap(int i, int j)
{
int t = arr[i] ; arr[i] = arr[j] ; arr[j] = t ; return ;
}
int msk = 1 << rad, i = 0, j = len-1 ;
while (i < j)
{
while ((arr[i] & msk) == 0 && i < len) { i++ ; }
while ((arr[j] & msk) != 0 && j > 0 ) { j-- ; }
if (i < j) { swap(i,j) ; }
}
rsort(arr, i, rad - 1) ; rsort(arr+i, len-i, rad - 1) ; return ;
}
int max = arr[0] , i ;
for ( i = 1 ; i < len ; i++ ) { if (arr[i] > max) { max = arr[i] ; } }
for ( i = 0 ; max >>= 1 ; i++ ) {}
rsort(arr, len, i) ; return ;
}