qsort

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

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

 

函数原型

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

// 参数:        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 *));

 

示例

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

下面是一个使用的例子:

#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;
}

编译输出结果:

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

 

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


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

  

posted @ 2014-04-13 23:31  Feng.break  阅读(288)  评论(0)    收藏  举报