C语言库函数(快速排序)--qsort()

本文最后更新于:2 个月前

qsort()函数是一种用于对数组快速排序的函数,他是一个通用的排序函数,支持对不同类型的元素进行排序

头文件

qsort()是包含在C语言标准库<stdlib.h>中的函数,所以想使用该函数应在程序前引用该头文件

#include <stdlib.h>

函数声明

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

  • base -> 数组名

  • nitems ->元素个数

  • size -> 数组元素所占字节(int,char等所占字节)

  • (*compar)(const void , const void) -> 排序原则(递增,递减等)

    排序原则?

    通过定义一个函数compar,通过这个函数返回的参数来去确定排序规则

    注意:compar函数中参数需要以const void *a,const void *b**的形式来定义,表示a,b的类型是“未确定”(void),在return时候进行强制类型转换为int型,*(int*)a-*(int*)b**表示递增顺序,如果递减只需要更换a和b的位置

    1
    2
    3
    int compar(const void *a,const void *b) {
    return *(int*)a-*(int*)b;//递增
    }

不同类型元素排序

对于不同的类型,只需要改变compar函数就可以

整形(int)

1
2
3
int compar(const void *a, const void *b){
return *(int*)a-*(int*)b;
}

浮点型(double)

注意!浮点数存在精度损失[1]的问题,运算可能会出错,所以我们选择比较的方式

1
2
3
int compar(const void *a, const void *b){
return *(double*)a>*(double*)b?1:-1;//三目运算符,如果前大于后,输出1,反之输出-1
}

字符型(char)

1
2
3
int compar(const void *a, const void *b){
return *(char*)a-*(char*)b;
}

实例

升序排序一个10位数数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
int i = 0;

int compar(const void *a, const void *b){
return *(int*)a-*(int*)b;
}
int main(){
int a[10] = {1,4,6,7,8,2,9,5,3,10};
qsort(a,10,sizeof(int),compar);
for(i = 0; i < 10; i++){
printf("%d ",a[i]);
}
return 0;
}

输出结果

1 2 3 4 5 6 7 8 9 10

  1. 浮点数并不精确,5.000实际上可能是5.000000000003

C语言库函数(快速排序)--qsort()
https://blog.seasalt-haiyan.top/2023/11/20/C语言库函数-快速排序-qsort/
作者
Xu Haoyang
发布于
2023年11月20日
更新于
2024年2月28日
许可协议