编写一个sort函数,它用于对任何类型的数组进行排序 10
编写一个sort函数,它用于对任何类型的数组进行排序。为了是函数更为通用,它的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供。比较函数接收两个参数...
编写一个sort函数,它用于对任何类型的数组进行排序。
为了是函数更为通用,它的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供。比较函数接收两个参数,也就是两个指向需要进行比较的值的指针。如果两值相等,返回0,如果值1小于值2,返回-1,否则返回1.
请写的详细点~
是c 展开
为了是函数更为通用,它的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供。比较函数接收两个参数,也就是两个指向需要进行比较的值的指针。如果两值相等,返回0,如果值1小于值2,返回-1,否则返回1.
请写的详细点~
是c 展开
2个回答
展开全部
如下,为了简便,程序中使用了一些标准库函数,所以需要包含两个头文件,sort()函数利用选择排序算法对数组进行排序,调用时需要传入的参数和标准库函数qsort()一致
#include <stdlib.h>
#include <string.h>
void sort(void *base,unsigned int n,unsigned int width,int (*comp)(void *a,void *b))
{
char *p=(char *)base;
char *te=(char *)malloc(width);
char *ptr;
char *pn=p+width;
const char *cp=p+(n-1)*width;
for (; p<cp; p+=width) {
ptr=p;
for (pn=p+width; pn<=cp; pn+=width)
if ((*comp)(ptr,pn)>0) ptr=pn;
if (ptr!=p) {
memcpy(te,p,width);
memmove(p,ptr,width);
memmove(ptr,te,width);
}
}
free(te);
}
#include <stdlib.h>
#include <string.h>
void sort(void *base,unsigned int n,unsigned int width,int (*comp)(void *a,void *b))
{
char *p=(char *)base;
char *te=(char *)malloc(width);
char *ptr;
char *pn=p+width;
const char *cp=p+(n-1)*width;
for (; p<cp; p+=width) {
ptr=p;
for (pn=p+width; pn<=cp; pn+=width)
if ((*comp)(ptr,pn)>0) ptr=pn;
if (ptr!=p) {
memcpy(te,p,width);
memmove(p,ptr,width);
memmove(ptr,te,width);
}
}
free(te);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
STL里有sort函数,接受任意类型的泛型容器,比如vector,list等等.参考那个的源代码不是挺好吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询