qsort函数的使用(详解)及其模拟实现

qsort

  • 一.首先介绍什么是qsort
    • 1.1参数的含义
      • 1.第一个元素base
      • 2.第二个元素base
      • 3.第三个元素size
      • 4.第四个元素compar
  • 二.qsort的使用
      • 2.1.1头文件
      • 2.1.2实现函数的参数compar
      • 2.1.3比较整形变量
      • 2.1.4比较浮点形变量
      • 2.1.5比较字符串变量
      • 2.1.6比较结构体变量
  • 三.案例
      • 3.1案例代码

一.首先介绍什么是qsort

qsort()函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。

1.1参数的含义

qsort函数的使用(详解)及其模拟实现_第1张图片
qsort函数的使用(详解)及其模拟实现_第2张图片

1.第一个元素base

我们要排序一组数据,首先我们需要找到这组数据在哪,base是指向待排序的第一个元素,就是起始地址

2.第二个元素base

base就是待排序的元素个数

3.第三个元素size

size就是待排序元素的大小

4.第四个元素compar

compar是一个函数指针,指向的函数可以比较两个元素

二.qsort的使用

2.1.1头文件

如果需要使用qsort函数就需要引用 #include 头文件

2.1.2实现函数的参数compar

qsort函数给cmp函数规定了特定的参数。因此我们设计cmp函数时要按照其规定使用

int cmp_int(const void* e1, const void* e2)

这里可以比较的数据有整型,浮点型,字符串,还有结构体等

2.1.3比较整形变量

int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}

2.1.4比较浮点形变量

int cmp_float(const void* e1, const void* e2)
{
	return (int)(*(float*)e1 - *(float*)e2);
}

2.1.5比较字符串变量

int cmp_str_size(const void* e1, const void* e2)
{
	return strcmp((char*)e1,(char*)e2);
}

2.1.6比较结构体变量

int cmp_by_age(const void*e1, const void*e2)
{
	return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);
}

三.案例

3.1案例代码


int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}

void print_arr(int arr[], int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

//test测试排序结构体
struct stu
{
	char name[20];
	int age;
};

//按照年零比较
int cmp_stu_by_age(const void* e1, const void* e2)
{
	return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}

int cmp_stu_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}

void test2()
{
	struct stu s[] = { {"zhangsan",20},{"lishi",10},{"wangwu",60} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}

void test1()
{
	int arr[] = { 3,6,1,9,7,5,4,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[1]), cmp_int);
	print_arr(arr, sz);
}
int main()
{
	test2();
	return 0;
}

这里是按照姓名比较也就是字符串比较,
qsort函数的使用(详解)及其模拟实现_第3张图片

原来的姓名第一个是zhangsan,现在看调试结果
qsort函数的使用(详解)及其模拟实现_第4张图片
第一个是lishi,是按照首字母的大小顺序排序的。

你可能感兴趣的:(c语言,开发语言)