0
点赞
收藏
分享

微信扫一扫

【C语言知识点碎片拼图】快速排序函数qsort介绍

头文件

stdlib.h或search.h

特点

可以排序任意类型

参数传递

【C语言知识点碎片拼图】快速排序函数qsort介绍_i++

【C语言知识点碎片拼图】快速排序函数qsort介绍_函数声明_02

void*的指针可以接收任意类型的指针,不过在使用的时候要先强制类型转换为你所需要的类型才可以使用

#include <stdlib.h>
int main()
{
int arr[6] = { 4,5,9,7,2,4 };
qsort(arr)
}

size_t就是一个无符号整型

【C语言知识点碎片拼图】快速排序函数qsort介绍_qsort_03

第二个参数size_t  _NumOfElements

num of elements   num的元素,也就是说我们要将要排序的元素个数传递给他

#include <stdlib.h>
int main()
{
int arr[6] = { 4,5,9,7,2,4 };
qsort(arr, 6);
return 0;
}

第三个参数size_t _SizeOfElements

sizeof是C语言计算大小的操作符也就是说第三个参数我们要传递元素的大小

#include <stdlib.h>
int main()
{
int arr[6] = { 4,5,9,7,2,4 };
qsort(arr, 6,sizeof(arr[0]),);
return 0;
}

第四个参数CompareFunction

比较函数,也就是说我们要写一个能够比较两个元素大小的函数传递给他

而这个函数又该怎么设计呢,通过查询cpulspuls可以知道我们需要设计一个函数当函数的形参1大于形参2时返回<0,等于时返回0,大于时返回1

【C语言知识点碎片拼图】快速排序函数qsort介绍_i++_04

#include <stdio.h>
#include <stdlib.h>
int compare(const void* elem1, const void* elem2);//函数声明
int main()
{
int arr[6] = { 4,5,9,7,2,4 };
qsort(arr, 6,sizeof(arr[0]),compare);
for (int i = 0; i < 6; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
int compare(const void* elem1,const void* elem2)
{
return *(int*)elem1 - *(int*)elem2;
}

【C语言知识点碎片拼图】快速排序函数qsort介绍_C语言_05

可以看到这样我们就得到了一个升序的数组,如果需要一个降序的我们只需要将返回值的正负变一下即可。

当然我们说过qsort可以排序任意类型,只需要将我们的传递的参数更改一个即可

#include <stdio.h>
#include <stdlib.h>
int compare(const void* elem1, const void* elem2);//函数声明
int main()
{
char arr[6] = "cbeda";
qsort(arr, 6,sizeof(arr[0]),compare);
for (int i = 0; i < 6; i++)
{
printf("%c ", arr[i]);
}
return 0;
}
int compare(const void* elem1,const void* elem2)
{
return *(char*)elem1 - *(char*)elem2;
}

【C语言知识点碎片拼图】快速排序函数qsort介绍_i++_06

a前面有一个空格是由于\0也是一个字符被进行了排序

举报

相关推荐

0 条评论