因为在工作中经常需要对数组进行排序,不少排序的算法都会自己整理一份,但如果没有整理的话,那就要重新写一份,很麻烦。
听过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也是排序不错的选择。
原文:http://www.cnblogs.com/breaklife/p/3663066.html