C语言中关于库函数 qsort 快排的用法
前言我也只是一个奋斗的程序猿仅以此篇文章作为我学习的见证可能我的文采不好有时候讲的词不达意但我尽力去做好我想做的这些事情如果此篇文章能够给各位读者带来一定的认识那自然是最好的。若文章中有鄙人讲错了的欢迎评论区指点。谢谢一、库函数qsort的含义头文件#include stdlib.h作用将一个无序的数组进行有序的排列。这就是这个库函数的作用。二、qsort函数的实现方式话不多说请看。void qsort( voidbase,size_t num,size_t width,cmp_int );全是英语看不懂别担心让我慢慢为你道来1. 第一个参数voidbase, 这个参数的意思就是 将要排序的那个数组 我们在写的时候直接写数组名就行了。2. 第二个参数size_t num, 第二个参数的意思就是 voidbase,这个数组的元素个数。比如int arr[10],这里就写10这里举个栗子下面会继续讲解。3. 第三个参数size_t width, 这第三个参数呢灰常简单就是该数组元素的 大小 例如整形数组 int arr[10],元素大小就是4个字节因为整形int在内存中占的就是4个字节的空间。4. 第四个参数这最后一个参数呢稍微复杂那么一点点的参数也不难的。往下看。 cmp_int 其实在MSDN上这里写得稍微看上去很复杂这里呢我将这第四个参数封装为一个函数让我们看上去简单一点实则原理都是相同的。具体的函数实现如下12345intcmp_int(constvoid* e1,constvoid* e2){//e1-e2得到的是升序return*(int*)e1 - *(int*)e2;}1). 函数的参数const void* e1 和 const void* e2两个参数接收的都是数组里面元素的地址 void* 意思就是无类型指针它呢比较特殊它可以接收来自任何类型的值比如float、int、char等等它都能接收。至于这里的 const 就是修饰*e1或*e2当有 const 修饰时这两个的值就不能被修改具体的大家可以查一下这里就不多讲了。2). 这第四个参数的重点当e1减去e2时我们最后输出得到的就是 升序 的结果当然e2减去e1就是 降序 。口诀 左减右为升反之则降 。大家可能还注意到了 e1 前面还有个圆括号int *e1为什么呢我们所要排序的数组是整形数组 int arr[10], 当我们使用寻址操作符时计算机会知道我们所需要访问的空间大小吗显然它是不知道的。寻址操作符是根据数据的类型根据类型的大小去访问内存空间。这里我们需要 强制类型转换 为整形才可以去访问的不然计算机也不知道我们具体需要访问多大的内存空间。是吧。讲到这里呢也就讲完了我们看具体的代码实现吧。。三、函数实现12345678910111213141516171819202122//qsort的用法#include stdio.h#include stdlib.hintcmp_int(constvoid* e1,constvoid* e2){//e1-e2得到的是升序return*(int*)e1 - *(int*)e2;}intmain(){intarr[10] { 2,3,1,4,5,6,7,9,8,10 };intsz sizeof(arr) /sizeof(arr[0]);qsort(arr, sz,sizeof(arr[0]), cmp_int);inti 0;for(i 0; i sz; i)printf(%d , arr[i]);return0;}最后看一下我们输出的结果四、总结快速排序不仅仅只是排序整形哦还可以浮点型等等我们在对不同类型的数据进行排序时只需要注意最后一个参数里面的内容稍有改动其他的大致差不多特别记住 左减右为升反之则降 哦这个记住了也就懂了这个库函数是怎么用的。