zoukankan      html  css  js  c++  java
  • 排序算法--介绍

    1、什么是排序?

    排序就是将一组数据按照指定的顺序进行排列的过程

    2、排序分类

     内部排序是将所有数据都加载到内存中进行排序

    外部排序是针对数据量过大,无法全部加载到内存中,需借助外部存储才能完成的排序

    3、时间复杂度相关

      3.1 度量程序算法的方法:

      • 事前统计:根据时间复杂度判断
      • 事后统计:根据运行时间判断,运行时间受计算机硬件和算法的影响

      3.2 时间频度

        3.2.1 介绍:程序中语句执行的次数称为时间频度

            案例:

              

             时间频度为T(n)=n+1,因为循环遍历n次后,最后还需要进行一次判断i是否<=end

            

             时间频度为T(n)=1,因为不管end为多少,都是执行一次

        

      3.3  时间复杂度

        3.3.1 介绍:

          刚才的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。

        3.3.2 计算时间复杂度的方法

          • 在一个时间复杂度中可以忽略常数项(随着n值的增大,数值无限接近)
          • 可以忽略低次幂项
          • 平方次可以忽略高次幂的系数,立方次随着n的增大,接近立方前面的系数倍

           

    例:T(n)=n^2+7n+6   =>   T(n)=n^2

        3.3.3 常见时间复杂度

       

         

            3.3.3.1 对数阶分析O(log2n)

                   

                 循环里每次都是i*2,假设x次之后结束循环,那么等式关系就是2^x=n,所以x=log2n

             3.3.3.2 线性对数阶分析O(NlogN)

                  

                 内部循环是一个对数阶logN,外部又进行了n次循环,所以总次数是NlogN

    4、平均时间复杂度和最坏时间复杂度

     

     

     5、空间复杂度:

      介绍:一个算法在运行过程中所占存储空间的大小

      

    在做算法分析时,主要讨论的是时间复杂度。
    从用户使用体验上看,更看重的程序执行的速度。
    一些缓存产品(redis,memcache)和算法(基数排序)本质就是用空间换时间.

      

     

  • 相关阅读:
    AC日记——红色的幻想乡 洛谷 P3801
    AC日记——Power收集 洛谷 P3800
    AC日记——妖梦拼木棒 洛谷 P3799
    AC日记——妖梦斩木棒 洛谷 P3797
    AC日记——小魔女帕琪 洛谷 P3802
    AC日记——双栈排序 洛谷 P1155
    AC日记——明明的烦恼 bzoj 1005
    AC日记——[HNOI2014]世界树 bzoj 3572
    AC日记——魔法森林 洛谷 P2387
    AC日记——【模板】点分治(聪聪可可) 洛谷 P2634
  • 原文地址:https://www.cnblogs.com/han200113/p/11653663.html
Copyright © 2011-2022 走看看