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也是排序不错的选择。

  

你可能感兴趣的:(sort)