冒泡排序法之qsort函数的使用

qsort函数介绍

qsort函数C语言编译器函数库自带的排序函数,其包含在C标准库<stdlib.h>中。函数声明为:
void qsort(void* base,size_t num,size_t width,int (cmp*)(const void* e1,const void* e2);
1.qsort函数返回类型为空;
2.base:是指要排序数组的第一个元素的地址,也可以是数组名,由于要排序的数组类型不能确定,所以指针类型必须是void类型,具体使用时根据需要进行指针类型强制转换
3.num:是指排序数组元素的个数,size_t是头文件里定义的无符号整形
4.width:是指数组中每个元素的字节大小
5.cmp:是一个函数指针用来调用自己定义好要排序数组的函数,函数返回类型是int,函数里的参数是要比较的两个元素地址,类型也是void*,当e1在e2左边,函数返回值<0;当e2在e1左边,函数返回值>0;当e1=e2,函数返回值=0;
函数声明可以在库函数<stdlib.h>中找,也可以在cplusplus中找。

冒泡排序

冒泡排序算法我已经在上篇文章里陈述过,这里不再赘述。

整数

int cmp_int(const void*e1,const void* e2)
{
	return *(int*)e1-*(int*)e2;
}
void test_int()
{
	int arr[]={9,8,7,6,5,4,3,2,1,0};
	int i=0;
	int sz=sizeof(arr)/sizeof(arr[0]);
	qsort(arr,sz,sizeof(arr[0]),cmp_int);
	for(i=0;i<sz;i++)
	{
		printf("%d ",arr[i]);
	
	}
}
int main()
{
	test_int();
	//test_float();
	//test_stu_age();
	//test_stu_name();
	return 0;
}

浮点数

int cmp_float(const void* e1,const void* e2)
{
	//return (int)(*(float*)e1-*(float*)e2);//强制转换有问题,不能解决9.2和9.3的比较
	if(*(float*)e1==*(float*)e2)
	{
		return 0;
	}
	else if(*(float*)e1>*(float*)e2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}
void test_float()
{
	float f[]={9.125,9.282,9.123,9.540,67.0,6.0,5.0};
	int j =0;
	int sz=sizeof(f)/sizeof(f[0]);
	qsort(f,sz,sizeof(f[0]),cmp_float);
	for(j=0;j<sz;j++)
	{
		printf("%f ",f[j]);
	}
}
int main()
{
	//test_int();
	test_float();
	//test_stu_age();
	//test_stu_name();
	return 0;
}

结构体

struct Stu
{
	char name[20];
	int age;	
};
int cmp_stu_age(const void* e1,const void* e2)
{
	return (((struct Stu*)e1)->age)-(((struct Stu*)e2)->age);

}
int cmp_stu_name(const void* e1,const void* e2)
{
	//字符串比较使用字符串比较函数strcmp(),strcmp返回类型和qsort一样
	return strcmp(((struct Stu*)e1)->name,((struct Stu*)e1)->name);

}
void test_stu_age()
{
	struct Stu s[3]={{"zhangsan",30},{"lisi",10},{"wangwu",20}};
	int sz=sizeof(s)/sizeof(s[0]);
	qsort(s,sz,sizeof(s[0]),cmp_stu_age);

}
void test_stu_name()
{
	struct Stu s[3]={{"zhangsan",30},{"lisi",10},{"wangwu",20}};
	int sz=sizeof(s)/sizeof(s[0]);
	qsort(s,sz,sizeof(s[0]),cmp_stu_name);
	//第一个参数:待排序数组的首元素地址
	//第二个参数:待排序数组的元素个数
	//第三个参数:待排序数组的每个元素的大小,单位是字节
	//第四个参数:是函数指针,比较两个元素大小所用函数的地址,自己定义的函数
	//            函数的两个参数是带比较元素的地址
}

int main()
{
	//test_int();
	test_float();
	//test_stu_age();
	//test_stu_name();
	return 0;
}

本文是使用qsort函数对整数、浮点数、结构体数组元素进行排序,新手上传,如有不足请批评指正!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值