系列文章目录
qsort目录
- 系列文章目录
- 一、前言
- 二、qosort是什么?
- 二、qsort的使用
- 1、原型
- 2、参数
- 3、头文件
- (1)qsort参数中的函数指针讲解
- 三、使用示例和运行截图
- 1、整形例子(升序)
- 3、字符例子(降序)
一、前言
qsort是C语言自带的快速排序,一般与bsearch查找一起连用.
二、qosort是什么?
-
对数组的元素进行排序。
-
对数组中由指向的元素进行排序,每个元素字节长,使用该函数确定顺序。
-
此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向它们的指针作为参数。
-
该函数不返回任何值,但通过重新排序数组的元素(如 所定义)来修改指向的数组的内容.
二、qsort的使用
1、原型
void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));
无返回值,void。
2、参数
第一参数:指向要排序的数组的第一个对象的指针——首地址
第二参数:数组中由指向的元素数
第三参数:数组中每个元素的大小(以字节为单位)
第四参数:指向比较两个元素的函数的指针——函数指针
3、头文件
#include <stdlib.h>
(1)qsort参数中的函数指针讲解
- 原型: int compar (const void* p1, const void* p2);
- 返回类型为整形(int),返回值为 1、0、-1(与strcmp返回值一致)
- 注意:在使用时const void* p1, const void* p2 需要进行强制转换,才可以使用,否则会报错。如 :对整形数组快排,(int*)p1和(int*)p2。
- 要实现升序则通过 return (*e1 -*e2)或 return strcmp(*e1, *e2)
- 要实现升序则通过 return (*e2 -*e1)或 return strcmp(*e2, *e1)
- 4和5点要强制才能使用
三、使用示例和运行截图
1、整形例子(升序)
#include <stdio.h>
#include <stdlib.h>
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;
}
3、字符例子(降序)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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;
}