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

    来源:https://www.bilibili.com/video/BV1B4411H76f?p=39

    一、排序算法的分类

    1、内部排序

      即将数据加载到内部存储器中,之后进行排序。

      具体来说又可以分为以下几个常用的类

        a)插入排序:

          直接插入排序

          希尔排序

        b)选择排序:

          简单选择排序

          堆排序

        c)交换排序

          冒泡排序

          快速排序

        d)归并排序

        e)基数排序

    2、外部排序

      数据量过大,需要借助外部存储的帮助(文件、磁盘等)

    二、算法的时间复杂度

    1、时间频度

    时间频度指的是一个算法中语句的执行次数,一般用T(n)表示

    例如:

    1 int total = 0;
    2 int end = 100;
    3 for(int i = 0; i <= end;i++){
    4   total++;  
    5 }

    上面这个简单的代码要执行的次数与end有关,最终加起来T(n)=n+1

    这样的具体计算也可以用一行代码来完成

    1 tatal = (1 + end)*end/2;

    这样的话,时间频度就可以降低至T(n)=1,这里的计算次数与end没有关系了。

    由于时间频度的计算与一个变量有关,所有时间频度有如下特点:

      a)可以忽略常数项

      b)可以忽略低阶次项

      c)可以忽略系数

    2、时间复杂度

    已知算法的时间频度T(n),如果存在一个辅助函数f(n),当n趋近于无穷大时,T(n)/f(n)的比值如果是一个不为零的常数,那么我们称f(n)是一个与T(n)同数量级的函数。可以这样表示T(n)=O(f(n))。这里我们称O(f(n))为时间复杂度。

    存在这样的情况,时间频度T(n)不相同,而时间复杂度O(n)相同。

    例如:T(n)=n2+7n+6 与 T(n)=3n2+2n+2时间复杂度相同,为什么呢?

    因为,时间复杂度有一个计算方法:

    • 用1代替常数
    • 只保留高阶项
    • 去掉高阶项的系数

    因此,上述两个时间频度的时间复杂度O(n)=n2,或者简写为O(n2)

    3、常见的时间复杂度

    1. 常数阶O(1)
    2. 对数阶O(log2n)
    3. 线性阶O(n)
    4. 线性对数阶O(nlog2n)
    5. 平方阶O(n2)
    6. 立方阶O(n3)
    7. k次方阶O(nk)
    8. 指数阶O(2n)

    从上到下时间复杂度依次增大,因此要避免指数阶

  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/zhao-xin/p/13158607.html
Copyright © 2011-2022 走看看