美文网首页
编程珠玑 第十一章总结

编程珠玑 第十一章总结

作者: fertilizer | 来源:发表于2017-08-03 10:43 被阅读0次

这一章主要讲了quick-sort和其改进的过程。下面主要总结一下改进的动机。

  • 动机1:
    原始的快速排序算法适合于数字大小随机分布的情况。若是一个相同的序列,那么每次划分的点都是未划分点中位置最靠前的点,导致划分不均匀,时间复杂度退化到o(n^2)。

  • 解决方案:
    用两个指针分别向中间靠拢,基准点依然选择序列中最左侧的点,左指针当遇到比基准点大或等于的点就stop,同理右指针遇到比基准点小或等于的点就stop,这样导致划分点靠近数字的中间,使得时间复杂度接近于归并排序的时间复杂度nlog(n)

void qsort(vector<int>& v, int l, int u) {
    if (l >= u) return;
    int t = v[l]; int i = l; int j = u+1;
    while(true) {
        do {
            i++;
        }while(i <= u && v[i] < t);
        do {
            j--;
        }while(v[j] > t);
        if (i > j) {
            break;
        }
        swap(v[i], v[j]);
    }
    swap(v[j], v[l]);
    qsort(v, l, i - 1);
    qsort(v, i + 1, u);
}
  • 动机2:
    选取基准点可以随机化

  • 动机3:
    对小规模序列快排效果不如插入排序。所以在动机1代码中添加了

if(u - l < threshold)
  return;

提前终止排序,最后再使用插入排序的算法对整体排序。

相关文章

  • 编程珠玑 第十一章总结

    这一章主要讲了quick-sort和其改进的过程。下面主要总结一下改进的动机。 动机1:原始的快速排序算法适合于数...

  • 编程珠玑 第一章总结

    第一章只介绍了一个问题,我将问题重新描述一下 input:一个最多含有n个正整数的文件,每个数都小于n,n = 1...

  • 《编程珠玑》之珠玑

    作者:Jon Bentley 本书的作者通过一个一个实际生活中的例子来给引导我们对编程进行思考,虽然在实际工作中我...

  • 编程珠玑

    ## 编写自己的代码库 应该将自己编写的每一个程序都当作一个日后可以重用的库。 * 编写用例,在实现中将计算过程分...

  • 《编程珠玑》第一章

    案例:一个最多包含n个正整数的磁盘文件,每个数都小于n,其中n=10^7,文件中不包含重复的数。要求输出按升序排列...

  • 相关书籍

    《大话数据结构》《剑指Offer》《编程之美》《编程珠玑》

  • 《编程珠玑高清》PDF高清完整版-免费下载

    《编程珠玑高清》PDF高清完整版-免费下载 《编程珠玑高清》PDF高清完整版-免费下载 下载地址:网盘下载 备用地...

  • 编程珠玑 笔记

    第一章 开篇 友好的对话 在别人不会问问题时,引导他去问问题也是一个很大的学问。Jon与一个程序员问的问...

  • 编程珠玑-01

    说来惭愧, 大概半年前买的, 在书柜里躺了半年了, 前几天看了几页, 很认真的那种看, 仅仅看了几页, 觉得还是能...

  • 编程珠玑11.6

    今天读了《编程珠玑》的第三章,可能是这本书写的比较早(30年前)的缘故吧,有很多地方感觉不理解。但是在那个时代作者...

网友评论

      本文标题:编程珠玑 第十一章总结

      本文链接:https://www.haomeiwen.com/subject/peiulxtx.html