qsort(…)的使用方法
在 stdlib.h 中,有一个 qsort(…) 函数,用于对给定的元素进行快速排序。
她的声明是:
void qsort(
void *base, /*待排序的数组*/
size_t n, /*数组中元素的个数*/
size_t size, /*数组中每个元素所占的内存字节数*/
int (*cmp) (const void *,const void * ) /*对任意两个元素进行比较的函数*/
)
具体说来,qsort(…)对base[0]…base[n-1]数组中的对象,进行升序排序,数组中每个对象的长度位size。其中,cmp是一个用于排序比较的函数。cmp的描述如下:如果第一个参数(查找关键字)小于第二个参数(表项),则必须返回一个负值;如果第一个参数等于第二个参数,则必须返回0;如果第一个参数大于第二个参数,则必须返回一个正数。
显而易见,通过稍稍调整cmp比较的方式,就可以实现在qsort中的逆序排序。
具体的排序代码,请见:这里
我们先来看一个简单的例子,它说明了如何对一个一维数组中的元素进行排序。
代码分析如下:
第11行的cmp()定义是很值得分析的:
- 参数 const void * i 要分成两部分来看, 
 首先,是 void * i ,这表示一个指针i,指针的类型是 void * 这是什么类型的指针呢?
 “ANSI C的一个最重要的变化是,它明确地制订了操纵指针的规则。事实上,这些规则已经被很多优秀的程序设计人员和编译器所采纳。此外,ANSI C使用类型 void * (指向void的指针)代替 char * 作为通用指针的类型。”(《C程序设计语言》第五章,第三段。)
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号