【C语言】qsort详细将解

系列文章目录


qsort目录

  • 系列文章目录
  • 一、前言
  • 二、qosort是什么?
  • 二、qsort的使用
    • 1、原型
    • 2、参数
    • 3、头文件
      • (1)qsort参数中的函数指针讲解
  • 三、使用示例和运行截图
    • 1、整形例子(升序)
    • 3、字符例子(降序)


一、前言

qsort是C语言自带的快速排序,一般与bsearch查找一起连用.


二、qosort是什么?

  1. 对数组的元素进行排序。

  2. 对数组中由指向的元素进行排序,每个元素字节长,使用该函数确定顺序。

  3. 此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向它们的指针作为参数。

  4. 该函数不返回任何值,但通过重新排序数组的元素(如 所定义)来修改指向的数组的内容.


二、qsort的使用

1、原型

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

无返回值,void。

2、参数

第一参数:指向要排序的数组的第一个对象的指针——首地址
第二参数:数组中由指向的元素数
第三参数:数组中每个元素的大小(以字节为单位)
第四参数:指向比较两个元素的函数的指针——函数指针

3、头文件

#include 

(1)qsort参数中的函数指针讲解

  1. 原型: int compar (const void* p1, const void* p2);
  2. 返回类型为整形(int),返回值为 1、0、-1(与strcmp返回值一致)
  3. 注意:在使用时const void* p1, const void* p2 需要进行强制转换,才可以使用,否则会报错。如 :对整形数组快排,(int*)p1和(int*)p2。
  4. 要实现升序则通过 return (*e1 -*e2)或 return strcmp(*e1, *e2)
  5. 要实现升序则通过 return (*e2 -*e1)或 return strcmp(*e2, *e1)
  6. 4和5点要强制才能使用

三、使用示例和运行截图

1、整形例子(升序)

#include 
#include 

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

int main()
{
	int arr[10] = { 5,6,2,8,6,7,9,1,4,3 };
	int i = 0;

	qsort(arr, 10, 4, compare);//快排

	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

【C语言】qsort详细将解_第1张图片

3、字符例子(降序)

#include 
#include 
#include 

int compare(const void* p1, const void* p2)
{
	char* e1 = (char*)p1;
	char* e2 = (char*)p2;
	return (*e2 - *e1);
}

int main()
{
	char ch[5] = { 'b','e','c','a','d'};
	int i = 0;

	qsort(ch, 5, 1, compare);//快排

	for (i = 0; i < 5; i++)
	{
		printf("%c ", ch[i]);
	}
	return 0;
}

【C语言】qsort详细将解_第2张图片

你可能感兴趣的:(c语言,数据结构,算法)