欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

qsort函数的原理

墨初 知识笔记 155阅读

如何使用 qsort 函数编写比较函数?

答:使用 qsort 最重要的是比较函数的编写。 首先, qsort 函数的原型中已经对此元素的原型有了明确的规定: int (*compar) (const void *, const void *) ,需要传入指向两个元素的指针。 与上文增加第三个参数的原因相同,比较函数的参数指针是 void * 类型,这个参数同样不知道元素实际的大小,因此我们需要进行类型的强转,转换成元素实际类型对应的指针,例如上文中为了给一个 int 型数组排序:

为什么qsort()为从小到大即升序排序?

答:如果a小于b,则返回值为负数(< 0),也即a会排在b的前面。 同理,若a大于b,则a会排在b的后面。 所以,这里的qsort ()为从小到大即升序排序。 因此,运行结果为:10 20 25 40 90 100 即可,想想为什么可以。

qsort(arr, sizeof(arr)/sizeof (arr [0]), compare)是什么意思?

答:所以 qsort (arr, sizeof (arr)/sizeof (arr [0]), sizeof (arr [0]), compare); 对qsort函数的调用中,第二个参数是待排元素的个数(5个),第三个参数是待排元素的大小(16)。 我们将arr传入qsort函数, qsort函数将arr理解为指向数组第一个元素的指针 ,arr的第一个元素是 arr [0] [0] ,所以参数arg1和arg2指的是指向" a [i] [0] "的指针,我们知道, a [i] [0] 是字符,就是char,所以arg1和arg2指的是 char * 。

如何将arr传入qsort函数?

答:我们将arr传入qsort函数, qsort函数将arr理解为指向数组第一个元素的指针 ,arr的第一个元素是 arr [0] [0] ,所以参数arg1和arg2指的是指向" a [i] [0] "的指针,我们知道, a [i] [0] 是字符,就是char,所以arg1和arg2指的是 char * 。 我们将 void* 转换为 char* ,赋予a和b,调用strcmp函数对a和b进行比较。

声明:无特别说明,转载请标明本文来源!