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

#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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值