头文件
stdlib.h或search.h
特点
可以排序任意类型
参数传递
void*的指针可以接收任意类型的指针,不过在使用的时候要先强制类型转换为你所需要的类型才可以使用
#include <stdlib.h>
int main()
{
int arr[6] = { 4,5,9,7,2,4 };
qsort(arr)
}
size_t就是一个无符号整型
第二个参数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
#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;
}
可以看到这样我们就得到了一个升序的数组,如果需要一个降序的我们只需要将返回值的正负变一下即可。
当然我们说过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;
}
a前面有一个空格是由于\0也是一个字符被进行了排序