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

来源:互联网 发布:公司软件开发外包 编辑:程序博客网 时间:2024/06/01 07:21
#ifndef _SORT_H_INCLUDE_#define _SORT_H_INCLUDE_#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>voidngx_sort(void*base,size_t n,size_t size,int(*cmp)(const void*,const void*));voidngx_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.omain:$(obj)gcc -o main $(obj)main.o:sort.o:clean:rm -rf main $(obj)



0 0
原创粉丝点击