void  bubble_sort ( void *  base, int  sz, size_t  wedth, int ( * cmp) ( void * , void * ) ) 
int  int_cmp ( const  void *  e1, const  void *  e2) 
{ return  * ( int * ) e1 -  * ( int * ) e2; 
} 
void  swap ( void *  e1,  void *  e2, int  sz) 
{ int  i =  0 ; for  ( i =  0 ; i <  sz;  i++ ) { char  tmp =  * ( ( char * ) e1 +  i) ; * ( ( char * ) e1 +  i)  =  * ( ( char * ) e2 +  i) ; * ( ( char * ) e2 +  i)  =  tmp; } 
} 
# define  _CRT_SECURE_NO_WARNINGS # include  <stdio.h> int  int_cmp ( const  void *  e1, const  void *  e2) 
{ return  * ( int * ) e1 -  * ( int * ) e2; 
} void  swap ( void *  e1,  void *  e2, int  sz) 
{ int  i =  0 ; for  ( i =  0 ; i <  sz;  i++ ) { char  tmp =  * ( ( char * ) e1 +  i) ; * ( ( char * ) e1 +  i)  =  * ( ( char * ) e2 +  i) ; * ( ( char * ) e2 +  i)  =  tmp; } 
} void  bubble_sort ( void *  base, int  sz, size_t  wedth, int ( * cmp) ( void * , void * ) ) 
{ for  ( int  i =  0 ;  i <  sz;  i++ ) { for  ( int  j =  0 ;  j <  sz -  i -  1 ;  j++ ) { if  ( cmp ( ( char * ) base+ j* wedth, ( char * ) base+ ( j+ 1 ) * wedth) > 0 ) { swap ( ( char * ) base +  j *  wedth, ( char * ) base +  ( j +  1 )  *  wedth,  wedth) ; } } } 
} 
int  main ( void ) 
{ int  arr[ ]  =  {  9 , 5 , 6 , 7 , 2 , 0 , 1 , 4 , 3 , 8  } ; int  i =  0 ; int  sz =  sizeof ( arr)  /  sizeof ( arr[ 0 ] ) ; bubble_sort ( arr,  sz,  sizeof ( arr[ 0 ] ) ,  int_cmp) ; for  ( i =  0 ;  i <  sz;  i++ ) { printf ( "%d " , arr[ i] ) ; } printf ( "\r\n" ) ; return  0 ; 
}