细讲qsore函数用法

  1. qsort函数介绍
  2. qsort函数使用方法

在这里插入图片描述

前言

✨上一期发的模仿qsort实现一个冒泡排序的通用算法
可能有一些小伙伴不会使用或者不了解qsort函数的使用,这一期带大家细讲一下qsort函数!


qsort函数介绍

qsort函数是C语言提供一个库函数,主要用于排序各种类型的数据,是一个通用的排序函数,排序内核思想使用的是快速排序。

头文件 - include

描述
C 库函数void qsort(void* base, size_t nitems, size_t size, int (*compar)(const void , const void)) 对数组进行排序

声明

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • base – 指向要排序的数组的第一个元素的指针。
  • nitems – 由 base 指向的数组中元素的个数。
  • size – 数组中每个元素的大小,以字节为单位。
  • compar – 用来比较两个元素的函数。

返回值
该函数不返回任何值。


qsort函数使用方法

qsort要求提供一个自己定义的比较函数
⭐️比如一个整形数组进行排序

int arr[6]={3,2,5,4,1,6};
int cmp_int (const void* e1 , const void* e2)//注意参数形式是固定的
	{	//我们要进行强制类型转换
			int *e1=(int *)e1;
			int *e2=(int *)e2;
			return *e1-*e2;
	}
	qsort(arr,6,sizeof(arr[0]),cmp_int);
		//这里的sizeof(arr[0])也可直接写成4,前提知道是给int型排序

如果cmp_int返回值小于0(< 0),那么e1所指向元素会被排在e2所指向元素的前面,也就是升序
如果cmp_int返回值等于0(= 0),那么e1所指向元素与e2所指向元素的顺序不确定
如果cmp_int返回值大于0(> 0),那么e1所指向元素会被排在e2所指向元素的后面

⭐️比如对char类型排序

char arr[6];
int cmp_char(const void* e1 , const void* e2)  //参数格式固定
{
	//强制类型转换
    char* a = (char*)_a;    
    char* b = (char*)_b;
    return *a - *b;  
}

qsort(arr,6,sizeof(arr[0]),cmp_char); 
//同样这里sizeof(arr[0])也可直接写1,因为知道是char类型

⭐️对字符串类型

char arr[40][20];
int cmp_string(const void* e1 , const void* e2)  //参数格式固定
{
	return strcmp(((char*)e1), ((char*)e2));
}

qsort(arr,40,sizeof(arr[0]),cmp_string); 

⭐️对于结构体类型
你要确认根据什么排序,我这里示范就根据名字name进行排序

struct stu
{
		char six[20];
		char name[20];
		int age;	
}struct stu s[3] = { {"zhangsan", 30},{"lisi", 34},{"wangwu", 20} };
int cmp_name(const void* e1 , const void* e2)  //参数格式固定
{
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int count=sizeof(s) / sizeof(s[0])
qsort(s, count, sizeof(s[0]), cmp_name);


细讲qsore函数用法_第1张图片

你可能感兴趣的:(c语言,算法,排序算法)