| qsort函数声明如下: void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 参数说明如下:base: 要排序的数组
 nmemb: 数组中的元素数目
 size: 每个数组元素占用内存空间,可使用sizeof获得
 compar: 比较两个数组元素的比较函数。本比较函数的第一个参数值小于、等于、大于第二参数值时,本比较函数的返回值应分别小于、等于、大于零。
 也就说你要实现一个这样的函数:int cmp(const void *a, const void *b)
 如果a > b,返回>0
 如果a == b, 返回0
 如果a < b,返回<0
 这里的a和b的关系仅仅是逻辑上的,并不是值比较,所以排序的可以不仅仅是数字,还可以是字符。
 | 
                
            
            
             
            bsearch函数声明如下:
            void *bsearch(const void *key, const void *base, size_t *nelem, 
size_t width, int(*fcmp)(const void *, const *));
            参数的意思和qsort的差不多,区别在于:
1. qsort用来排序,bsearch用二分法来查找元素
2. bsearch中的base必须是升序排列的数组!!!
3. 如果数组里有重复的答案,则bsearch会返回其中一个的地址 (具体返回哪一个不确定)
4. bsearch有五个自变量,第一个是要找的东西,剩下的跟qsort一模一样
5. bsearch如果没找到所求则回传NULL ,否则回传该元素被找到的地址(void *) 
            c函数qsort()和bsearch()的用法 
使用qsort()排序 并 用 bsearch()搜索是一个比较常用的组合,使用方便快捷。 
qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )
            其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。
            比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
            qsort(a,1000,sizeof(int ),comp);
            其中comp函数应写为:
            int comp(const void *a,const void *b) 
{ 
return *(int *)a-*(int *)b; 
}
            而关于bsearch() ,他和qsort的用法基本一样,只是他的返回值是一个指向找到的单位元素的一个指针,另外他多了一个参数,是一个指向查找元素的一个指针。
            比如:从上面例子中的结构体数组中查找一个字符串:
            str *locate; 
char buffer[30]="abc"; 
locate=(str*)bsearch(buffer,strin,total,sizeof(str),com);
            int com(const void *a,const void *b) 
{ 
return strcmp( (char*)a, ((str*)b)->str2 ); 
}
            注意这里cmp与qsotr的有所不同。
            qsort 和bsearch的cmp函数不同的
qsort 比较的时dict 数组的两个成员
bsearch比较的时key 和dict中成员