C语言qsort函数有什么用

  介绍

这篇文章将为大家详细讲解有关C语言qsort函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一.qsort函数是什么

我们可以使用,搜索库函数网址或者MSDN软件进行查找。

qsort()函数:快速排序的函数,——引用stdlib。h头文件

 C语言qsort函数有什么用“> </p> <p> <代码>参数说明:<br/> </代码> </p> <blockquote> <pre类= void  qsort  (,      ,,,void *,,,//要排序的目标数组   ,,,size_t  num,,,,,,//待排序的元素个数   ,,,size_t 宽度,,,,,//一个元素的大小,单位是字节   ,,,int (* cmp) (void * const  e1, const  void *, e2)      );

其中<代码> cmp是函数指针>

<强>返回值:

,,,,,,, C语言qsort函数有什么用“> </p> <h4>,二。使用qsort排序——以升序为例</h4> <p> <强>关于void *型指针:</强> <br/> </p> <blockquote> <p> void *:无具体类型的指针,,能够接收任意类型的地址<br/> <代码>,缺点:不能进行运算不。能+ -整数,不能解引用</代码> </p> </引用> <pre类= int  a ,=, 0;   float  f =, 5.5 f;   void *, p1 =,,,   void *, p2 =,, f;   p1 =, p1 + 1,,,,,//呃

1。整形数组排序

<强>注意:

(1)。比较函数的参数类型为void *,我们要进行强制类型转换!且要解引用才能得到对应的值!

(2)。若我们想排成降序,只需要写成e2-e1即可

void 打印(int *,加勒比海盗,,int 深圳)   {   ,int 小姐:=,0;   ,for (小姐:=,0;,小姐:& lt;,深圳;,我+ +)   ,{   ,,printf (“% d “,, * (+ arr  i));   ,}   ,printf (“\ n");   }//比较整形//注意类型时void *,所以要强制类型转化,还要解引用才是对应的值! ! !   int  cmp_int (void * const  e1, const  void *, e2)   {   * (int *), return  e1 作用;* (int *) e2;   }   void  test1 ()   {   ,int  arr [],=, {, 9、8、7、6、7、5、4、8,};   ,int  sz =, sizeof (arr),/, sizeof (arr [0]);   ,qsort(加勒比海盗,深圳,,sizeof (arr [0]), cmp_int);   ,打印(加勒比海盗,sz);   }
2。字符数组排序

注意使用<代码> sizeof()操作符和<代码> strlen()函数> //注意要要强制类型转换! !,要解引用! ! !,,本质上是比较Ascii值   int  cmp_char (void * const  e1, const  void *, e2)   {   ,,,return  * (char *) e1 作用;* (char *) e2;   }   void  test4 ()   {   ,char  arr [],=癿ango";   ,,,//若使用sizeof计算长度:   ,//int  sz =, sizeof (arr),/, sizeof (arr [0]);//6   ,//qsort(加勒比海盗,sz-1,, sizeof (arr [0]), cmp_float);   ,,,//因为运算符把\ 0也算进去了,所以计算出来的值比字符串本身长度多1   ,,,,   ,,,int  sz =, strlen (arr);//5   ,,,qsort(加勒比海盗,深圳,,sizeof (arr [0]), cmp_char);   ,printf (“% s \ n" arr);   }

3。字符指针数组排序

先看看下面这段程序有没有问题?

int  cmp_chars (void * const  e1, const  void *, e2)   {   ,return  strcmp (e1 (char *), * (char *) e2);   }   void  test2 ()   {   char *,才能arr1 =,“abc";   char *,才能arr2 =,“wcad";   char *,才能arr3 =,“cab";   char *,才能p [3],=, {, arr1, arr2 arr3 };   ,int  sz =, sizeof (p),/, sizeof (p [0]);   ,qsort (p,深圳,,sizeof (p [0]),, cmp_chars);   ,int 小姐:=,0;   ,for (小姐:=,0;,小姐:& lt;,深圳;,我+ +)   ,{   ,,printf (“% s \ n",, p[我]);   ,}   }

<>强打印出来发现:结果是错误的!

 C语言qsort函数有什么用“> </p> <p>,→调试后发现:e2存放的是p的地址(char * *类型),e1存放的是p指向的下一个元素的地址(char * *类型),,,,,,,</p> <p>对于这种写法,传进去的是p的地址,strcmp()会将p地址对应的内容转化成字符串,也就是将p中arr1, arr2, arr3的地址转化成字符串<h2 class=C语言qsort函数有什么用