快捷搜索: 王者荣耀 脱发

C语言函数——qsort函数的使用

一、qsort函数:

1、定义:

void qsort ( void* base, //待排序数据的起始地址 size_t num, //待排序数据的元素个数 size_t size, //待排序数据元素的大小(单位是字节) int (*compar)(const void*,const void*) //比较2个元素大小的函数指针 ); 对数组的元素进行排序: 对数组中指向的元素进行排序,每个元素的长度为字节,使用函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向这些元素的指针作为参数。该函数不返回任何值,而是通过对其元素进行重新排序来修改所指向的数组的内容。

2、参数:

(1).基础

指向要排序的数组的第一个对象的指针,该对象已转换为 .void*

(2).数字

所指向的数组中的元素数。 是无符号整数类型。base

(3).大小

数组中每个元素的大小(以字节为单位)。 是无符号整数类型。

(4).比较

二、总代码:

1、整型比较:

int compare(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);
}

void test()
{
	int arr[] = { 3,5,7,2,9,6,1,8,4,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), compare);
	print(arr, sz);
}

2、浮点型比较:

int compare(const void* p1, const void* p2)
{
	return (int)(*(double*)p1 - *(double*)p2);
}

void test()
{
	double arr[] = { 3.2,5.4,7.1,2.3,9.6,6.0,1.1,8.4,4.2,10.1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), compare);
	print(arr, sz);
}

3、字符串比较:

int compare(const void* p1, const void* p2)
{
	return strcmp((char*)p1, (char*)p2);
}

void test()
{
	char arr[] = "bgedfac";
	int sz = strlen(arr);
	qsort(arr, sz, sizeof(arr[0]), compare);
	printf("%s", arr);
}

4、结构体比较:

struct stu
{
	char name[10];
	int age;
};

int compare_name(const void* p1, const void* p2)
{
	return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}

int compare_age(const void* p1, const void* p2)
{
	return (((struct stu*)p1)->age - ((struct stu*)p2)->age);
}

void print(struct stu s[],int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%s,%d  ", s[i].name, s[i].age);
	}
	printf("
");
}

test()
{
	struct stu s[] = { {"zhangsan",33},{"lisi",22},{"wangwu",44} };
	int sz = sizeof(s) / sizeof(s[0]);

	qsort(s, sz, sizeof(s[0]), compare_name);
	print(s, sz);

	qsort(s, sz, sizeof(s[0]), compare_age);
	print(s,sz);

}
经验分享 程序员 微信小程序 职场和发展