首页 > 其他 > 详细

qsort

时间:2014-04-14 08:43:33      阅读:429      评论:0      收藏:0      [点我收藏+]

因为在工作中经常需要对数组进行排序,不少排序的算法都会自己整理一份,但如果没有整理的话,那就要重新写一份,很麻烦。

听过C标准库中自带排序函数qsort,今天试了一下效果不错。

 

函数原型

bubuko.com,布布扣
//****************************************************************************/

// 参数:        base   --    待排列的数组起始地址。

//              nmemb  --    数组元素个数

//              size   --    数组元素的大小

//              compar --    对比规则函数     >>  参数    :  两个待比较的元素地址

//                                          >>   返回值 :   <=0    --  两元素不交换

//                                                         >0     --  两元素交换                                  

// 返回值:    无

//****************************************************************************/

#include <stdlib.h>

void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
bubuko.com,布布扣

 

示例

qsort有一点好处就是可以编写比较规则函数。

下面是一个使用的例子:

bubuko.com,布布扣
#include <stdio.h>
/// 比较规则,按照降序排列
int compress(const void *a, const void *b)
{
    return *(int*)a < *(int*)b;
}

int main()
{
    int arr[] = {4, 5, 7, 8, 2, 4, 6, 9, 1};

// 元素个数
int num = sizeof(arr)/sizeof(arr[0]);
// 进行排序 qsort(arr
, num, sizeof(arr[0]), compress);
  //输出结果
   int i =0;
    for ( ; i<num; i++)
    {
         printf("%d,", arr[i]);
    }
    printf("\n");
    return 0;
}
bubuko.com,布布扣

编译输出结果:

bubuko.com,布布扣
$ gcc qsort.c 
$ ./a.out 
9,8,7,6,5,4,4,2,1,
bubuko.com,布布扣

 

qsort还可以对指定范围内的数组排序,主需要调用的时候,调整base 与nmemb。
例如上面的例子,如果只想对5, 7, 8, 2, 4, 6,排序,可以这样调用
qsort(arr+1, num-3, sizeof(arr[0]), compress);


以上就是今天的学习了, 类似与qsort, C++的sort也是排序不错的选择。

  

qsort,布布扣,bubuko.com

qsort

原文:http://www.cnblogs.com/breaklife/p/3663066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!