(C)qsort 用法

qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度是n*log(n),其结构为:
 
  
void qsort( void * buffer, size_t count, size_t size, int ( * compare)( const void * , const void * ) );

参数:

*buffer  为要排序的数组
count  为要排序的数组的长度
size   为数组的大小
compare 为判断大小函数的指针,这个需要自己写 (很关键!)

用法:

1.对int类型数组排序
 
    
int number[ 100 ];

int cmp( const void * a, const void * b)
{
return * ( int * )a -* ( int * )b; // 强制类型转换
}

qsort(number,
100 , sizeof ( int ),cmp);
2.对char类型数组排序
 
    
char str[ 100 ];

int cmp( const void * a, const void * b)
{
return * ( char * )a -* ( char * )b; // 同int类型
}

qsort(str,
100 , sizeof ( char ),cmp);
3.对double类型数组排序
 
    
double number[ 100 ];

int cmp( const void * a, const void * b)
{
return * ( double * )a >* ( double * )b ? 1 : - 1 ;
}

qsort(number,
100 , sizeof ( double ),cmp);
4.对结构体一级排序
 
    
struct node
{
double data;
int other;
}s[
100 ];

// 按照data的值从小到大将s排序
int cmp( const void * a, const void * b)
{
return ( * (node * )a).data > ( * (node * )b).data ? 1 : - 1 ;
}

qsort(s,
100 , sizeof (node),cmp);
5.对结构体二级排序
 
    
struct node
{
int x,y;
}s[
100 ];

int cmp( const void * a, const void * b) // 按照x从小到达排序,当x相等,y按照从大到小排
{
struct node * c = (node * )a;
struct node * d = (node * )b;
if (c -> x != d -> x)
return c -> x - d -> x; // 从小到达排序
else
return d -> y - c -> y; // 从大到小排
}

qsort(s,
100 , sizeof (node),cmp);
6.对字符串排序
 
    
struct STR_NODE
{
int data;
char str[ 100 ];
}s[
100 ];

// 按照结构体中字符串str的字典顺序排序
int cmp( const void * a, const void * b)
{
return strcmp(( * (STR_NODE * )a) -> str,( * (STR_NODE * )b) -> str);
}

qsort(s,
100 , sizeof (STR_NODE),cmp);
转自网络

转载于:https://www.cnblogs.com/chaehom/archive/2011/02/24/1963781.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值