qsort实现原理与应用 指向函数的指针

标准库函数 qsort ,在 stdlib.h 中声明,其原型为: 

void qsort(void *base, int nelem, unsigned int width, 
                 int ( * pfCompare)( const void *, const void *)); 


使用该函数,可以对任何类型的一维数组排序。该函数参数中,base 是待排序数组的 
起始地址,nelem 是待排序数组的元素个数,width 是待排序数组的每个元素的大小(以字 
节为单位),最后一个参数 pfCompare 是一个函数指针,它指向一个“比较函数”。


 int ( * pfCompare)( const void *, const void *));是一个函数指针,需要用户自己定义一个比较函数。


调用 qsort 库函数,将一个 unsigned int 数组按照个位数从小到 

大进行排序。比如 8,23,15 三个数,按个位数从小到大排序,就应该是 23,15,8 

1.  #include <stdio.h> 
2.  #include <stdlib.h> 
3.  int MyCompare( const void * elem1, const void * elem2 ) 
4.   { 
5.       unsigned int * p1, * p2; 
6.       p1 = (unsigned int *) elem1; 
7.       p2 = (unsigned int *) elem2 ; 
8.       return (* p1 % 10)  - (* p2 % 10 ); 
9.   } 
10. #define NUM 5 
11. int main() 
12.  { 
13.      unsigned int an[NUM] = { 8,123,11,10,4 }; 
14.      qsort( an, NUM, sizeof(unsigned int), MyCompare); 
15.      for( int i = 0;i < NUM; i ++ ) 
16.          printf("%d ", an[i]); 
17.      return 0; 
18.  } 

    上面程序的输出结果是: 


     10 11 123 4 8 


#include <stdio.h>

#include <stdlib.h>

int cmp_int(const void *a,const void *b){
    int *_a=(int *)a;
    int *_b=(int *)b;
    return (*_a)-(*_b);
}
int main(){
    int i;
    int (*p)(); //指向函数的指针
    p=cmp_int;
    int a[5]={5,23,6,1,4};
    qsort(a,5,sizeof(int),p);
    for(i=0;i<5;i++)
    printf("%d ",a[i]);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值