在c++中qsort()排序函数的使用qsort函数应用大全,在同样的元素和同样的比较条件下,sort()的执行速度都比qsort()要快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。 在C++编程中,排序是常见的操作,有多种方法可以实现。本文主要讨论两种内置的排序函数:`qsort()` 和 `sort()`。`qsort()` 函数来源于C标准库 `<cstdlib>`,而`sort()` 是C++ STL(标准模板库)中的成员,位于 `<algorithm>` 头文件内。 `qsort()` 函数是一种通用的排序算法,适用于基本数据类型如`int`、`char`、`double`以及自定义数据类型如结构体。它的基本使用方式如下: 1. 对整型数组排序: ```cpp int num[100]; int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; } qsort(num, 100, sizeof(num[0]), cmp); ``` 2. 对字符数组排序(与整型相似): ```cpp char word[100]; int cmp(const void *a, const void *b) { return *(char*)a - *(char*)b; } qsort(word, 100, sizeof(word[0]), cmp); ``` 3. 对浮点型数组排序: ```cpp double in[100]; int cmp(const void *a, const void *b) { return (*(double*)a > *(double*)b) ? 1 : -1; } qsort(in, 100, sizeof(in[0]), cmp); ``` 4. 对结构体一级排序: ```cpp struct In { double data; int other; }; int cmp(const void *a, const void *b) { return (*(In*)a)->data > (*(In*)b)->data ? 1 : -1; } qsort(s, 100, sizeof(s[0]), cmp); ``` 5. 对结构体二级排序: ```cpp struct In { int x; int y; }; int cmp(const void *a, const void *b) { struct In *c = (In*)a; struct In *d = (In*)b; if (c->x != d->x) return c->x - d->x; else return d->y - c->y; } qsort(s, 100, sizeof(s[0]), cmp); ``` 6. 对字符串排序: ```cpp struct In { int data; char str[100]; }; int cmp(const void *a, const void *b) { return strcmp((*(In*)a)->str, (*(In*)b)->str); } qsort(s, 100, sizeof(s[0]), cmp); ``` 7. 计算几何中求凸包的排序: ```cpp // 省略具体点结构体和计算方法 int cmp(const void *a, const void *b) { // ... } ``` `qsort()` 的灵活性在于它可以处理任意类型的数据,但需要提供一个比较函数 `cmp`,该函数定义了排序规则。然而,`qsort()` 不是C++标准库的一部分,因此它不能直接使用C++的特性,如模板。 相比之下,`std::sort()` 是C++ STL中的成员,它使用STL的迭代器接口,可以方便地应用于各种容器(如`vector`、`list`等)以及自定义类型。`sort()` 可以利用C++编译器的优化,通常执行速度更快。例如,对整型数组排序的示例: ```cpp #include <algorithm> int arr[100]; std::sort(arr, arr + 100); ``` `sort()` 无需自定义比较函数,除非要排序的对象不支持默认的比较操作。它也支持自定义比较函数对象或成员函数指针,从而实现更复杂的数据排序需求。 `qsort()` 更适合于传统的C程序员,或者需要在C和C++之间共享代码的场景。而`sort()` 是C++程序员的首选,因为它提供了更好的性能和更现代的编程风格。在实际开发中,应根据项目需求和团队习惯来选择合适的排序函数。
- 粉丝: 10
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助