排序、选择与优先队列技术深度解析
1. 排序算法概述
排序算法在计算机科学中具有重要地位,不同的排序算法适用于不同的场景。
1.1 多路合并
对于少量序列(可能最多八个)的多路合并值得特别关注。在这种情况下,优先队列可以保存在处理器寄存器中。
1.2 C/C++ 中的排序
排序是 C 标准库中的少数算法之一。不过,C 语言的排序函数 qsort 比 C++ 的 sort 函数更慢且更难使用。主要原因在于, qsort 通过函数指针传递比较函数,每次元素比较都要调用该函数;而 sort 使用 C++ 的模板机制,在编译时就确定了比较方式,生成的比较代码通常是一条机器指令。 sort 函数的参数是指向待排序序列起始位置的迭代器和指向序列结束位置之后的迭代器。在使用英特尔奔腾 III 和 GCC 2.95 的实验中,数组上的 sort 函数比手动实现的快速排序运行得更快。可能的原因是编译器设计者会调整代码优化器,使其为库版本的快速排序生成优质代码。STXXL 中有一个高效的并行磁盘外部内存排序器,GNU 标准库中提供了适用于多核机器的高效并行排序器(并行快速排序和并行多路归并排序)。在 GPU 上,已经使用了基数排序、归并排序和样本排序。
Exercise 5.58. 给出图 5.9 中 qSort 过程的 C 或 C++ 实现。仅使用两个参数:指向待排序(子)数组的指针及其
超级会员免费看
订阅专栏 解锁全文
1597

被折叠的 条评论
为什么被折叠?



