C和C++库中的排序函数解析

###如何使用C语言库中stdlib.h包含的qsort和C++库里的sort函数进行排序



sqort:

头文件:stdlib.h

原型: void qsort(void base,int nelem,int width,int (fcmp)(const void ,const void ));

参数:

1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

int compare (const void elem1, const void elem2 ) );



sort

头文件:algorithm

原型: void qsort(void start,void end,int (*fcmp)(int,int));

参数:

1 第一个是要排序的数组的起始地址

2 第二个是结束的地址(最后一位要排序的地址)

3 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序

int cmp(int elem1,int elem2);




我这里举了一个简单的例子,大家可以根据这个例子了解qsort和sort如何在实际程序中应用


qsort实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Title: test code
//Author Call偶围城
//Date: 2014-04-03
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b) {
return *(int*)a < *(int*)b;
}
int main() {
int arr[5] = {5,3,1,4,2};
qsort(arr,5,sizeof(int),cmp);
int i;
for (i = 0;i < 5;i++) {
printf("%d\n",arr[i]);
}
return 0;
}

结果:
5
4
3
2
1

sort实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Title: test code
//Author Call偶围城
//Date: 2014-04-03
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int cmp(int a,int b) {
return a < b;
}
int main() {
int arr[5] = {5,3,1,4,2};
sort(arr,arr+5,cmp);
int i;
for (i = 0;i < 5;i++) {
printf("%d\n",arr[i]);
}
return 0;
}

结果:
1
2
3
4
5

注意事项

  • 读者除了注意两个函数的所要包含的头文件和排序函数的参数不一样之外,cmp函数的参数类型也不样;
  • cmp函数建议使用int返回类型,特别是使用c语言时,使用bool返回类型可能会报错;
  • cmp中返回a小于b的真值时,qsort按降序排序,sort按增序排序
  • 对于qsort,cmp返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 0, 那就无所谓谁前谁后