#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(" ");
}
3360

被折叠的 条评论
为什么被折叠?



