qsort函数(C语言)

目录

介绍:

不同类型

        struct Stu(对比字符串):

        int:

        char:


介绍:

qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h 头文件中。函数原型如下:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

此函数需要四个参数。

qsort函数(C语言)_第1张图片

 对于比较函数,因比较形式的多量化,所以作者就将比较函数交给书写者自行进行编译书写。(以整数类型数组排序举例)

#include 
#include 

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

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

int main()
{
	int arr[3] = { 3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(sz, arr);
	return 0;
}

注:

  • cmp_int即为,为了进行整数数组的排序所进行的函数大小比较。
  • qsort对我们所传入的数据判断,以我们所写的来进行断定。
    int (__cdecl *compare )(const void *elem1, const void *elem2 ) 
    qsort函数(C语言)_第2张图片

        对此,我们知道qsort是一个运用,快排的方式,使得一串数据以低到高,如果,我们需要以高到低呢,这就需要反思维了,我们须知,以低到高,是有与前者大于后者即换,反之不换。那我们就反过来,后者大于前者即换,反之不换。那我们是不是就得到了一串有高到低的数据,于是我们将"e1 - e2";变为"e2 - e1"即可。以上者代码为例,我们将其变为如此即可:

#include 
#include 

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

int cmp_int(const void* e1, const void* e2)
{
	return (int*)e2 - (int*)e1; //重点变化点
}  //-------------------------------

int main()
{
	int arr[3] = { 3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(sz, arr);
	return 0;
}

不同类型

        struct Stu(对比字符串):

#include 
#include 

struct Stu
{
	char name[20];
	int age;
};

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

int main()
{
	struct Stu arr[3] = { {"zhangsan", 20},{"lisi", 30},{"wangwu", 10} };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s,%d   ", (arr[i]).name, (arr[i]).age);
	}
	printf("\n");
	return 0;
}

        int:

#include 
#include 

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

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

int main()
{
	int arr[3] = { 3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(sz, arr);
	return 0;
}

        char:

#include 
#include 

int cmp_char(const void* e1, const void* e2)
{
	int n = (*(char*)e1 - *(char*)e2);
	return (*(char*)e1 - *(char*)e2);
}

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

int main()
{
	char arr[3] = { 'b','a','c'};
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(sz, arr);
	return 0;
}

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