您的位置:首页 > 其它

关于sort排序通用的函数接口

2015-04-18 16:12 567 查看
#ifndef _SORT_H_INCLUDE_
#define _SORT_H_INCLUDE_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

void
ngx_sort(void*base,size_t n,size_t size,int(*cmp)(const void*,const void*));

void
ngx_print(void*base,size_t n,size_t size);

#endif
#include "sort.h"

void
ngx_sort(void*base,size_t n,size_t size,int(*cmp)(const void*p1,
const void*p2))
{
u_char	*p1,*p2,*p;
p=malloc(size);
if(p==NULL)
return ;
for(p1=(u_char*)base+size;
p1<(u_char*)base+size*n;
p1+=size)
{
memcpy(p,p1,size);

for(p2=p1;
p2>(u_char*)base&&cmp(p2-size,p)>0;
p2-=size)
{
memcpy(p2,p2-size,size);
}
memcpy(p2,p,size);
}
free(p);
}

void
ngx_print(void*base,size_t n,size_t size)
{
u_char		*elem;
size_t		 i=0;
elem=base;
for(i=0;i<n;i++){
printf("%d ",*elem);
elem+=size;
}
printf("\n");
}

#include "sort.h"

int ngx_cmp_int(const int *p,const int *q)
{
if(*p>*q)
return 1;
return -1;
}
int main(int ac,char**av)
{

int 		i,n;
int 		*a;

if(ac!=2){
printf("usage:av[1]\n");
return -1;
}
n=atoi(av[1]);
a=malloc(n*sizeof(int));
if(a==NULL)
return -1;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
ngx_print(a,n,sizeof(int));
ngx_sort(a,n,sizeof(int),ngx_cmp_int);
ngx_print(a,n,sizeof(int));

}
obj=sort.o main.o
main:$(obj)
gcc -o main $(obj)
main.o:
sort.o:

clean:
rm -rf main $(obj)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: