zoukankan      html  css  js  c++  java
  • 普林斯顿算法课第一二三周有感

    1.栈有两种实现方式:链表和可变化大小的数组

       链表优点:每次push和pop得时间是一定的,总的操作时间比数组大;

       数组优点:在扩张/压缩数组的插入/删除花费时间大,但均摊下来每次插入和删除都比链表快速,显得总的操作时间小。

        Q:何时采用链表方法?

        A:飞机场停飞机,网络中源源不断收到数据包。  因为这样情况下不允许突然来个长时间的插入。

    2.选择排序与插入排序比较:

       选择排序无论初始数组有序状况如何,其所耗费的时间复杂度是固定的,都需要对剩余未排序部分进行扫描;

       插入排序很大程度上依赖于初始数组有序程度,若较为有序,则速度很快,比选择排序块,若无序,很有可能接近于冒泡程度。

    3.为什么希尔排序是基于插入排序实现的?

       因为刚开始在gap比较大时,每个待排序的数组规模较小,此时各个排序复杂度差不多;

       当gap比较小,如2,1时,则此时经过前面的gap,数组的有序程度已经改善,此时用插入排序会更加快一些。

      Ps:当以gap1进行shell排序后,再进行gap2(gap2 < gap1)排序,则排完后的序列仍遵守gap1的排序结果。

    4.如何选择适当的排序算法?

    应当根据要求,比如是否要求稳定?是否要求确定的?各个key值是否独特的?key值类型是否有很多?需要链表形式还是数组形式?数组规模大小?初始数组有序的程度。

    从表格中可以看到,选择排序是无论数组规模或初始有序状态如何,其交换次数是固定,适合于数组规模较小情况。而插入排序适合于初始数组就比较有序,并且可以看到其平均时间复杂度比选择排序好一些。

    归并排序各方面表现良好,但是需要额外的数组空间;  快排不稳定,但实际中更快一些;   三向切分适合于有重复key值的情况。

  • 相关阅读:
    js(一)
    css (一)
    html
    Spring MVC(四)
    Spring MVC(三)
    Spring MVC(二)
    Spring MVC(一)
    Druid应用
    C3P0使用
    jdbc(二)
  • 原文地址:https://www.cnblogs.com/dzy521/p/9543361.html
Copyright © 2011-2022 走看看