指针是C语言初学者最为头疼的,然而,如果学好、用好了指针,你的程序功底就又增强了N级……
在Programing时,经常需要进行排序,如果自己写,通用性不好,也浪费时间和精力,有句话说得好:写程序就是为了不(少)写程序。其实在C标准库里已经有一个可用于
所有情况的快速排序的实现函数了,我们要做的只是写一个比较函数,这里就要用到函数指针了,下面详细说明:
C标准库中快速排序函数的声明:
cpp 代码
- #include <stdlib.h></stdlib.h>
-
- void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
-
-
-
在Linux的帮助页中是这样描述的:
DESCRIPTION
The
qsort() function sorts an array with
nmemb elements of size
size. The
base argument points to the start of the array.
The contents of the array are sorted in ascending order according to a comparison function pointed to by
compar, which is called with two arguments that point to the objects being compared.
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. If two members compare as equal, their order in the sorted array is undefined.
RETURN VALUE
The
qsort() function returns no value.
在声明void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));中的compar是一个函数指针,它指向一个带两个void *型参数且返回值为int的函数。base是要进行排序的数组的首地址;nmemb是要进行排序的元素的个数;size是数组中一个元素的大小(占用内存的字节数);compar是指向一个比较函数的函数指针。通俗地说就是对base[0], base[1], base[2], ...., base[nmemb-1]进行排序。
用法说明示例程序:
cpp 代码
- #include <stdio.h></stdio.h>
- #include <stdlib.h></stdlib.h>
-
-
-
-
-
-
-
- int cmpchar(const void *ch1, const void*ch2)
- {
- char* ch1 = (char*)p1;
- char* ch2 = (char*)p2;
-
- if (*ch1 - *ch2 > 0)
- return 1;
- else if (*ch1 - *ch2 == 0)
- return 0;
- else
- return -1;
- }
-
- int main(void)
- {
- char str[7] = "efdcba";
-
- qsort(str, 6, sizeof(char), cmpchar);
- printf("%s\n", str);
- return 0;
- }
关于函数指针的具体定义和用法请看 The C Programming Language (K & R) 第118-121页 *_*
相关推荐
·在第11.3.3节中,修改了对通用散列技术(universal hashing)的讨论,将其纳入到关于完美散列的讨论中。 ·在第12.4节中,对随机构造二叉查找树的高度,给出了一个简单得多的分析。 ·对动态规划元素的讨论(第...
∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历...
希尔排序:返回 假表示参数有误, 增量序列采用 2^n - 1 综合性能很不错的不稳定排序算法。其他.子程序:。文本型比较函数:注意只能支持文本型数组排序比较,其他类型 应该自己写比较函数,利用ntdll.dll的strcmp,...
∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...
·在第11.3.3节中,修改了对通用散列技术(universal hashing)的讨论,将其纳入到关于完美散列的讨论中。 ·在第12.4节中,对随机构造二叉查找树的高度,给出了一个简单得多的分析。 ·对动态规划元素的讨论(第...
现代C排序算法编译中将include用作包含目录以所需的方式编译src的所有.c文件。 可以在Linux上使用src/*/*.c对其进行匹配。 哎呀! 您现在可以使用所有标头,主要是来自include/Sorts用法内置类型一些算法有一个“ G...
∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...
在函数中进行 10个学生成绩从高到低排名, 再改进函数...编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。 步骤、方法与要求
07_函数重载和函数指针在一起 08_中午课程回顾 09_c++学习路线和c++基础课程学习标准_传智扫地僧 10_类的封装和访问控制 11_struct和class关键字区别 12_类的声明和类的实现分开 13_面向过程向面向对象转变案例1 14_...
“在库中的对应命令名”请务必准确填写静态库中公开导出的符号名称(C函数(cdecl)编译后,符号名称通常是在函数名称前加下划线(_));“在库中的对应命令名”以@开头表示以cdecl方式调用,否则表示以默认的stdcall...
可以方便容易地实现搜索数据或对数据排序等一系列的算法; 调试程序时更加安全和方便; 即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。 vector实质上就是一个动态数组,会根据...
希尔排序:返回 假表示参数有误, 增量序列采用 2^n - 1 综合性能很不错的不稳定排序算法。 其他.子程序: 文本型比较函数:注意只能支持文本型数组排序比较,其他类型 应该自己写比较函数,利用ntdll.dll的strcmp,...
实例40 函数指针 实例41 指针数组 实例42 二维指针 实例43 指针的初始化 实例44 综合实例 第二篇 深入提高篇 实例45 结构体变量 实例46 结构体数组 实例47 结构体指针变量 实例48 结构体指针数组 实例49 ...
4.16 真正的函数指针 97 4.17 真正的句柄 97 4.18 真正的循环 98 4.19 真正的static 98 4.20 真正的数组索引 99 4.21 类型和屏看原理 100 4.22 位操作与多维数组指针与元素 101 4.23 变量与VOID 102 第5章 抽象 102 ...
7.4.4 在构造函数中使用初始化列表 316 7.4.5 声明显式的构造函数 317 7.5 类的私有成员 318 7.5.1 访问私有类成员 320 7.5.2 类的友元函数 321 7.5.3 默认复制构造函数 323 7.6 this指针 325 7.7 类的const...
C++标准函数库中80%是STL,其中广泛使用了泛性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理...
16.2.4 函数指针和实参推断 607 16.2.5 模板实参推断和引用 608 16.2.6 理解std::move 610 16.2.7 转发 612 16.3 重载与模板 614 16.4 可变参数模板 618 16.4.1 编写可变参数函数模板 620 16.4.2 包...