#include
<
stdio.h
>
#include < string .h >
typedef int ( * COMPAREFUNC)( void * p1, void * p2);
typedef void ( * SELECT)( void ** a, int len);
int compfunc( void * p1, void * p2);
void select_sort( void ** a, int len, COMPAREFUNC compfunc);
void bubble_sort( void ** a, int len, COMPAREFUNC compfunc);
void mysort( void ** , int , COMPAREFUNC, void ( * )( void ** , int , COMPAREFUNC));
void print( void ** a, int len);
int strcomp( void * p1, void * p2)
... {
return strcmp((char *)p1, (char *)p2);
}
int intcomp( void * p1, void * p2)
... {
return *(int*)p1-*(int*)p2;
}
void select_sort( void ** a, int len, COMPAREFUNC compfunc)
... {
int i = 0;
int j = 0;
int k = 0;
void *ptmp = NULL;
for (i=0; i < len-1; i++) ...{
k=i; /**//*sentimel*/
for (j=i+1; j< len; j++) ...{
if ( compfunc(a[k],a[j]) > 0) ...{
k=j;
}
}
if ( k != i) ...{
ptmp = a[i];
a[i] = a[k];
a[k] = ptmp;
}
}
}
void bubble_sort( void ** a, int len, COMPAREFUNC compfunc)
... {
int i = 0;
int j = 0;
int k = 0;
void *ptmp = NULL;
for (i=0; i < len-1; i++) ...{
k=0; /**//*sentimel*/
for (j=len-1; j>i; j--) ...{
if ( compfunc(a[j-1],a[j]) > 0) ...{
ptmp = a[j];
a[j] = a[j-1];
a[j-1] = ptmp;
k = 1;
}
}
if ( k == 0) ...{
break;
}
}
}
void mysort( void ** a, int len, COMPAREFUNC compfunc, void ( * method)( void ** , int , COMPAREFUNC)) ... {
method(a, len, compfunc);
}
void strprint( void ** a, int len)
... {
int i = 0;
for (i = 0; i < len; i++) ...{
printf("%s ", (char *)a[i]);
}
}
void intprint( void ** a, int len)
... {
int i = 0;
for (i = 0; i < len; i++) ...{
printf("%d ", *(int *)a[i]);
}
}
void main( void )
... {
#define N 6
char *a[N]=...{"bdd", "aaa","ffc","dee","dde", "gf"};
int c[N]=...{6,1,3,5,4,2};
int *b[N];
int i = 0;
for (i =0;i<N;i++) ...{
b[i]=&c[i];
}
strprint(a, N);
printf(" ");
mysort(a, N, strcomp, bubble_sort);
// mysort(a, N, strcomp, select_sort);
strprint(a, N);
printf(" ");
intprint(b, N);
printf(" ");
mysort(b, N, intcomp, bubble_sort);
// mysort(b, N, intcomp, select_sort);
intprint(b, N);
printf(" ");
}
#include < string .h >
typedef int ( * COMPAREFUNC)( void * p1, void * p2);
typedef void ( * SELECT)( void ** a, int len);
int compfunc( void * p1, void * p2);
void select_sort( void ** a, int len, COMPAREFUNC compfunc);
void bubble_sort( void ** a, int len, COMPAREFUNC compfunc);
void mysort( void ** , int , COMPAREFUNC, void ( * )( void ** , int , COMPAREFUNC));
void print( void ** a, int len);
int strcomp( void * p1, void * p2)
... {
return strcmp((char *)p1, (char *)p2);
}
int intcomp( void * p1, void * p2)
... {
return *(int*)p1-*(int*)p2;
}
void select_sort( void ** a, int len, COMPAREFUNC compfunc)
... {
int i = 0;
int j = 0;
int k = 0;
void *ptmp = NULL;
for (i=0; i < len-1; i++) ...{
k=i; /**//*sentimel*/
for (j=i+1; j< len; j++) ...{
if ( compfunc(a[k],a[j]) > 0) ...{
k=j;
}
}
if ( k != i) ...{
ptmp = a[i];
a[i] = a[k];
a[k] = ptmp;
}
}
}
void bubble_sort( void ** a, int len, COMPAREFUNC compfunc)
... {
int i = 0;
int j = 0;
int k = 0;
void *ptmp = NULL;
for (i=0; i < len-1; i++) ...{
k=0; /**//*sentimel*/
for (j=len-1; j>i; j--) ...{
if ( compfunc(a[j-1],a[j]) > 0) ...{
ptmp = a[j];
a[j] = a[j-1];
a[j-1] = ptmp;
k = 1;
}
}
if ( k == 0) ...{
break;
}
}
}
void mysort( void ** a, int len, COMPAREFUNC compfunc, void ( * method)( void ** , int , COMPAREFUNC)) ... {
method(a, len, compfunc);
}
void strprint( void ** a, int len)
... {
int i = 0;
for (i = 0; i < len; i++) ...{
printf("%s ", (char *)a[i]);
}
}
void intprint( void ** a, int len)
... {
int i = 0;
for (i = 0; i < len; i++) ...{
printf("%d ", *(int *)a[i]);
}
}
void main( void )
... {
#define N 6
char *a[N]=...{"bdd", "aaa","ffc","dee","dde", "gf"};
int c[N]=...{6,1,3,5,4,2};
int *b[N];
int i = 0;
for (i =0;i<N;i++) ...{
b[i]=&c[i];
}
strprint(a, N);
printf(" ");
mysort(a, N, strcomp, bubble_sort);
// mysort(a, N, strcomp, select_sort);
strprint(a, N);
printf(" ");
intprint(b, N);
printf(" ");
mysort(b, N, intcomp, bubble_sort);
// mysort(b, N, intcomp, select_sort);
intprint(b, N);
printf(" ");
}