`
trophy
  • 浏览: 178641 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

几种数据结构复杂度

 
阅读更多
转自: http://hi.baidu.com/fang_sheng_hui/item/0cdf493ef4383208cfb9fe6c

数据结构中各种时间复杂度
(1)冒泡排序
        冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
(2)选择排序
      选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的。…… 例子说明好多了。序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了, 所以选择排序不稳定的排序算法

(3)插入排序
     插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果和插入元素相等,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变。所以插入排序是稳定的。
(4)快速排序
    快速排序有两个方向,左边的i下标一直往右走(往后),当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(往前),当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法。(不稳定发生在中枢元素和a[j]交换的时刻)
(5)归并排序
    归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列。不断合并直到原序列全部排好序。相等时不发生交换。所以,归并排序也是稳定的排序算法。
(6)基数排序
   基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。
(7)希尔排序(shell)
    希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
(8)堆排序
   我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n/2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序是不稳定的排序算法
一、排序
排序法 平均时间   最差情形      稳定度     额外空间     备注
冒泡    O(n2)            O(n2)             稳定         O(1)          n小时较好
交换    O(n2)            O(n2)             不稳定     O(1)            n小时较好
选择    O(n2)            O(n2)             不稳定     O(1)           n小时较好
插入    O(n2)             O(n2)              稳定       O(1)           大部分已排序时较好
Shell   O(nlogn)        O(ns) 1<s<2 不稳定    O(1)        s是所选分组
快速    O(nlogn)        O(n2)             不稳定      O(nlogn)      n大时较好
归并    O(nlogn)      O(nlogn)       稳定         O(1)           n大时较好
堆      O(nlogn)     O(nlogn)       不稳定   O(1)           n大时较好
基数    O(logRB)     O(logRB)       稳定         O(n)           B是真数(0-9),R是基数(个十百)
二、查找
未写……
三 树图
克鲁斯卡尔算法的时间复杂度为O(eloge)
普里姆算法的时间复杂度为O(n2)
迪杰斯特拉算法的时间复杂度为O(n2)
拓扑排序算法的时间复杂度为O(n+e)
关键路径算法的时间复杂度为O(n+e)
分享到:
评论

相关推荐

    数据结构时间复杂度

    ### 数据结构时间复杂度详解 #### 一、算法时间复杂度定义 在计算机科学中,算法的时间复杂度是一个衡量算法效率的重要指标。它用来描述算法的运行时间与输入数据规模之间的关系。通常,我们关心的是算法运行时间...

    时间复杂度的几种计算方法

    时间复杂度的几种计算方法 时间复杂度是算法优劣的重要指标,是数据结构的重要理论基础,是学习和教学过程中贯穿始终的主要线索。该知识点是数据结构的重要组成部分,对算法的时间性能进行评估和分析。时间复杂度的...

    数据结构时间复杂度总汇.doc

    本篇文章将概述几种常见的排序算法,并分析它们的时间复杂度、稳定性以及所需额外空间。 1. **冒泡排序**: - 时间复杂度:平均和最差情况都是O(n^2) - 稳定性:稳定排序,因为相同元素的相对顺序在排序过程中...

    数据结构1800试题.pdf

    在数据结构的学习中,以下几个知识点尤为重要: 1. **算法的基本概念**: - **算法的复杂性**:算法的计算量大小通常用时间复杂度和空间复杂度来衡量。时间复杂度表示算法运行所需的时间与问题规模的关系,例如,...

    软件复杂度概述

    软件复杂度指的是软件系统的复杂程度,它可以从多个维度进行评估,如逻辑复杂度、结构复杂度、数据流复杂度等。高复杂度通常意味着更高的错误率、更长的开发周期和更大的维护成本。 #### 二、软件复杂度的计算方法 ...

    速查表:常用算法和时间复杂度,算法数据结构

    在给定的数据中提到了几种数据结构和对应的时间复杂度: 1. **排序数组**:对于已排序的数组,可以使用二分查找算法,其时间复杂度为O(log(n)),在最差情况下(数组未排序)可能需要线性扫描,时间复杂度为O(n)。 ...

    数据结构课后答案.pdf

    以上提到的每一种数据结构都有其特定的应用场景和性能特点。学生在学习数据结构时,不仅要理解每种结构的基本操作,还应当学会根据不同问题的需求,选择合适的结构来设计和实现解决方案。同时,了解数据结构的时间...

    严蔚敏数据结构动态演示

    在严蔚敏的教材中,主要涵盖了以下几种基本的数据结构: 1. 线性结构:包括数组、链表(单链表、双链表)、栈和队列。数组是最基础的结构,它提供了随机访问的能力;链表则允许动态地增加和减少元素,适合于插入和...

    数据结构几种查找算法

    本主题将深入探讨几种常见的查找算法,包括二分查找(Binsearch)、二叉搜索树(BSTree)、哈希查找(Hash)以及顺序查找(Seqsearch)。这些算法在不同的场景下有着各自的优点和适用性,理解并掌握它们对于优化程序...

    海南大学《数据结构》期末试卷.pdf

    虽然文档中的部分内容似乎没有提供具体的问题或知识点,但我们可以基于标题、描述以及标签来探讨与《数据结构》相关的几个重要知识点。 ### 数据结构概述 数据结构是计算机科学中的一个重要概念,它指的是相互之间...

    王道数据结构.zip

    1. 理解数据结构的基本概念,如时间复杂度和空间复杂度。 2. 掌握各种数据结构的特性及其在实际问题中的应用。 3. 学会分析和设计算法,尤其是动态规划和贪心策略。 4. 通过编程实现数据结构和算法,加深理解和记忆...

    数据结构实验总结

    在“数据结构实验总结”中,我们可以期待涵盖以下几个关键知识点: 1. **数组**:数组是最基础的数据结构,它允许我们通过索引来访问元素。在实验中,可能会涉及到一维、二维数组以及动态数组的概念,比如C语言中的...

    数据结构常见排序的几种方法

    本程序涵盖了数据结构中常见的几种排序方法,下面将对这些排序算法进行详细介绍。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一。它通过不断比较相邻元素并交换位置来实现排序,重复这一过程,直到...

    几种内排序的方法 数据结构报告c++代码

    在这个数据结构报告中,我们将深入探讨七种不同的内排序算法:简单选择排序、冒泡排序、插入排序、快速排序、两路合并排序以及堆排序。这些排序算法在C++语言环境下进行了实现,并且包含了详细的源代码和实验报告,...

    严蔚敏数据结构课件 参考书籍严蔚敏主编的数据结构

    每种数据结构都有其特定的应用场景和操作方式,例如,链表适合动态调整大小,二叉树则常用于搜索和排序。 1.3 基本术语:这是理解数据结构的关键,包括节点、元素、指针、链、深度、宽度等。这些术语定义了数据结构...

    数据结构(C语言版)-严蔚敏-源代码

    在严蔚敏教授的书中,每种数据结构都有详细的理论讲解和对应的C语言实现,包括文件DS中的源代码,读者可以通过阅读和运行这些代码来加深理解。例如,链表的插入、删除操作,二叉树的遍历算法,以及排序算法的时间...

    数据结构实验5_数据结构实验5_数据结构实验_

    在这个实验中,学生贺欣可能已经实现了几种常见的数据结构,如数组、链表、栈、队列、树(包括二叉树、平衡树如AVL或红黑树)或图,并对它们进行了操作。这些基本数据结构是算法设计的基础,能够帮助我们解决各种...

    数据结构年终考题范围和答案+耿国华版

    在数据结构的学习中,重点在于理解每种数据结构的特点和适用场景。例如,二叉树是一种特殊的树形结构,通常用于实现查找、排序等操作,而图则常用于模拟现实世界中的网络关系。平衡二叉树如AVL树和红黑树可以保证...

    数据结构PPT课件

    在学习数据结构时,我们主要关注以下几个方面: 1. **基本概念**:数据结构是数据的逻辑组织形式,它定义了数据元素之间的关系。数据元素可以是单一的值,也可以是更复杂的数据单元。数据结构包括线性结构、树形...

    数据结构1800试题及答案

    算法的时间复杂度和空间复杂度是衡量算法好坏的重要标准,而数据结构的选择往往决定了算法在这两方面的表现。 ### 抽象数据类型(ADT) 抽象数据类型是一种高级数据类型,它定义了一个数据模型以及在这个模型上的...

Global site tag (gtag.js) - Google Analytics