介绍
这篇文章将为大家详细讲解有关C语言qsort函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一.qsort函数是什么
我们可以使用,搜索库函数网址或者MSDN软件进行查找。
qsort()函数:快速排序的函数,——引用stdlib。h头文件
void qsort (, ,,,void *,,,//要排序的目标数组 ,,,size_t num,,,,,,//待排序的元素个数 ,,,size_t 宽度,,,,,//一个元素的大小,单位是字节 ,,,int (* cmp) (void * const e1, const void *, e2) );
其中<代码> cmp是函数指针> 代码,cmp指向的是:排序时,用来比较两个元素的函数。需要自己编写。
引用><强>返回值:强>
,,,,,,, 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[我]); ,} }<>强打印出来发现:结果是错误的! 强>