网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

任意类型排序

模拟qsort()函数,实现任意类型排序:

尖山网站建设公司创新互联,尖山网站设计制作,有大型网站制作公司丰富经验。已为尖山成百上千提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的尖山做网站的公司定做!

 qsort()简介:

 原型:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 )

base:要排序的的数组的首地址


num:要排序的元素的个数


width:元素所占的字节数


compare:函数指针,指向排序方式这个函数的指针。其中比较方式这个函数需要用户根据自己的需要


使用qsort要调用


实现:

#include
#include
int compare(const void *elem1, const void *elem2)   //比较方式
{
	const int *str1 = (const int *)elem1;
	const int *str2 = (const int *)elem2;
	return *str1>*str2;                         //">"升序,“<"降序
}
void sort(void *base, size_t num,size_t byte, int(*cmp)(const void *elem1, const *elem2))
{
	char *str = (char *)base;
	int flag = 0;
	const void *p1;
	const void *p2;
	for (size_t i = 0; i < num - 1; i++)
	{
		flag = 0;
		for (size_t j = 0; j < num - 1 - i; j++)
		{
	           p1 =(const void *)(str+(j*byte));
	           p2 = (const void *)(str+(j + 1)*byte);
	           if (cmp(p1,p2))
		   {
		      for (size_t k = 0; k < byte; k++)           //按字节交换
		      {
			str[j*byte + k] = str[j*byte + k] + str[(j + 1)*byte + k];
			str[(j+1)*byte + k] = str[j*byte + k] - str[(j + 1)*byte + k];
			str[j*byte + k] = str[j*byte + k]-str[(j + 1)*byte + k];
		      }
		      flag = 1;
		}
	}
	if (!flag)
	break;
	}
}
int main()
{
	int(*cmp)(const void *elem1, const *elem2)=compare;
	int arr[4] = { 20,40,5, 4 };
	sort(arr,4,4, cmp);
	for (int i = 0; i < 4; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

新闻标题:任意类型排序
转载源于:http://bjjierui.cn/article/pjhojd.html

其他资讯