当前位置:   article > 正文

qsort (快排函数)_c语言自带排序函数

c语言自带排序函数

目录

1.简介

2.解析

声明

参数

3.示例

4.总结

5.更新日志


1.简介

qsort函数是C语言编译器自带的排序函数
头文件  #include <stdlib.h>

功能:排序

不返回任何值

2.解析
 

声明


void qsort(void * base,size_t num,size_t width,int(*compar)(const void *p1 ,const void *p2 ))

参数

base       指针,指向要排序数组的第一个元素

求法:   ①数组名(此时表示首元素的地址)

num        base指向的数组中元素的个数

求法:   ①直接传表示元素个数的变量/常量

              ② sizeof(array)/sizeof(array[0])      (数组大小除以首元素的大小)

width      数组中每个元素的大小(以字节为单位)

求法:   ①直接传表示元素大小的常量

              ② sizeof(char)、sizeof(int).....

           

compar   用来比较两个元素的函数,即函数指针(回调函数)

函数声明    int(*compar)(const void *p1 ,const void *p2 )

参数    两个形参的类型必须是 const void *

说明:

传入的实参也为const void *  ,在函数内部执行的时候,会将const void * 转换为实际所需要的类型

compar函数的返回值大小描述
compar返回值小于0p1所指向的元素会排在p2指向的元素左边
compar返回值等于0p1所指向的元素与p2指向的元素顺序不确定
compar返回值大于0p1所指向的元素会排在p2指向的元素右边

例如:从小到大排序

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

若从大到小 则 return *(int*)b-*(int*)a;

3.示例

①对一维数组排序

  1. #include <stdio.h> //对一维数组进行排序
  2. #include <stdlib.h>
  3. int compar(const void* x, const void* y)
  4. {
  5. return *(int*)x - *(int*)y; //从小到大排序
  6. }
  7. int main()
  8. {
  9. int i, Num;
  10. int* array;
  11. scanf("%d", &Num); //输入元素个数
  12. array = (int*)malloc(Num * sizeof(int)); //为元素开辟空间
  13. for (i = 0; i < Num; i++)
  14. scanf("%d", (array + i)); //输入元素
  15. qsort(array, Num, sizeof(int), compar); //调用快排函数
  16. for (i = 0; i < Num; i++)
  17. printf("%d ", array[i]);
  18. free(array);
  19. return 0;
  20. }

②二维数组

  1. qsort(a,1000,sizeof(int)*2,comp);
  2. int compar(const void*a,const void*b)
  3. {
  4. return((int*)a)[0]-((int*)b)[0];
  5. }

③字符串

  1. int compar(const void*p1,const void*p2)
  2. {
  3. return strcmp((char*)p2,(char*)p1);
  4. }

④结构体

4.总结

qsort函数还是挺经常用的,希望能够尽快熟练掌握

5.更新日志

2022.3.21 整理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/398380
推荐阅读
相关标签
  

闽ICP备14008679号