【C语言】qsort使用

使用时需要先引用stdlib.h这个头文件

#include<stdlib.h>

函数声明

  int qsort(void*  base,size_t  num,size_t  width,int(*compare)(const *void e1)(const *void e2))

其中compare为排序函数

int compare(const void* e1, const void* e)

首先看排序函数的参数 排序函数的参数类型 一定是const void*
const—可以使在函数运行的过程中 原数组的值不被改变
void—是为了提升函数普适性,强制规定函数参数为void*
因为一会要返回参数 所以函数返回类型规定int

使用示例

1、数组排序

#include<stdio.h>
#include<stdlib.h>
int compare(const void* e1, const void* e2)
{
	int* p1 = e1;
	int* p2 = e2;
	if (*p1 > *p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1 < *p2)
	{
		return -1;
	}
}
int main()
{
	int arr[10] = { 1,3,5,7,9,2,4,6,8,10 };
	qsort(arr, 10, 4, compare);
	for (int i = 0; i <= 9; i++)
	{
		printf("%d ", arr[i]);
	}
}

2、字符数组排序

#include<stdio.h>
#include<stdlib.h>
int compare(const void* e1, const void* e2)
{
	char* p1 = e1;
	char* p2 = e2;
	if (*p1 > *p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1 < *p2)
	{
		return -1;
	}
}
int main()
{
	char arr[10] = { 'a','c','b','d','h','g','t','n' ,'w'};
	qsort(arr, 9, 1, compare);
	printf("%s", arr);
}

3、字符串排序

#include<stdio.h>
#include<stdlib.h>
int compare(const void* e1, const void* e2)//规定按首字母顺序排序
{
	char* p1 = e1;
	char* p2 = e2;
	if (*p1 > *p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1 < *p2)
	{
		return -1;
	}
}
int main()
{
	char arr1[5] = "abc";
	char arr2[5] = "bcd";
	char arr3[5] = "cdf";
	char arr4[5] = "gnm";
	char* arr[4] = { arr1,arr2,arr3,arr4 };//定义了一个指针数组来存放四个字符串数组的指针(数组名为数组第一个元素地址)
	qsort(arr, 4, 4, compare);//每个元素均为指针,指针大小为4字节
	printf("%s %s %s %s", arr1,arr2,arr3,arr4);
}

4、结构体排序

#include<stdio.h>
#include<stdlib.h>
struct stu
{
	int grade;
	char name[20];
	char sex[10];
};
int compare(const void* e1, const void* e2)//规定按成绩排序
{
	struct stu* p1 = e1;
	struct stu* p2 = e2;
	if (p1->grade > p2->grade)
	{
		return 1;
	}
	else if (p1->grade==p2->grade)
	{
		return 0;
	}
	else if (p1->grade < p2->grade)
	{
		return -1;
	}
}
 
int main()
{
	struct stu a = { 90,"zhangsan","man" };
	struct stu b = { 80,"lisi","man" };
	struct stu c = { 70,"wangwu","man" };
	struct stu arr[3] = { a,b,c };
	qsort(arr, 3, sizeof(a), compare);
	for (int i = 0; i <= 2; i++)
		printf("%d %s %s\n", arr[i].grade, arr[i].name, arr[i].sex);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值