`
hz_chenwenbiao
  • 浏览: 1007736 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

数据结构中各种时间复杂度(转)

阅读更多

(1)冒泡排序

        冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 

(2)选择排序

      选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的。…… 例子说明好多了。序列5 8 5 2 9 我们知道第一遍选择第1个元素5会和2交换,那么原序列中25的相对前后顺序就被破坏了, 所以选择排序不稳定的排序算法

(3)插入排序
     
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果和插入元素相等,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变。所以插入排序是稳定的。

 

(4)快速排序

    快速排序有两个方向,左边的i下标一直往右走(往后),当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(往前),当a[j] > a[center_index]。如果ij都走不动了,i <= j, 交换a[i]a[j],重复上面的过程,直到i>j 交换a[j]a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11 现在中枢元素53(5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法。(不稳定发生在中枢元素和a[j]交换的时刻)

 

(5)归并排序
    
归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列。不断合并直到原序列全部排好序。相等时不发生交换。所以,归并排序也是稳定的排序算法。

 

(6)基数排序
   
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。

 

(7)希尔排序(shell)
    
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

 

(8)堆排序
   
我们知道堆的结构是节点i的孩子为2*i2*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是基数(个十百)

二、查找

未写……

 树图

克鲁斯卡尔算法的时间复杂度为Oeloge

普里姆算法的时间复杂度为On2

迪杰斯特拉算法的时间复杂度为On2

拓扑排序算法的时间复杂度为On+e

关键路径算法的时间复杂度为On+e

 

转载自:http://hi.baidu.com/fang_sheng_hui/blog/item/d68e39cace9518f752664fcb.html/cmtid/7a4bf935e8fe3140241f143c

分享到:
评论

相关推荐

    数据结构时间复杂度超详细概念解析(附实例)

    数据结构时间复杂度超详细概念解析 数据结构是计算机科学中一个非常重要的概念,而时间复杂度是数据结构中一个非常重要的分析方法。时间复杂度是指算法执行时间随输入规模增长而增长的量级,它是评价算法优劣的重要...

    数据结构时间复杂度

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

    数据结构时间复杂度和空间复杂度.pdf

    ### 数据结构中的时间复杂度与空间复杂度 #### 引言 数据结构和算法是编程领域的核心组成部分。数据结构指的是组织、管理和存储数据的方式,而算法则是解决特定问题的一系列步骤。两者之间的关系紧密,相互依赖。...

    数据结构--时间复杂度的计算.doc

    在计算机科学中,时间复杂度是衡量算法效率的重要指标,特别是在数据结构和算法分析中。时间复杂度描述了算法执行时间与输入数据规模之间的关系。本文档主要探讨了时间复杂度的概念及其计算方法。 时间复杂度分为两...

    深度解析:数据结构算法时间复杂度分析指南

    本文将详细介绍时间复杂度的基本概念、分析方法,并结合数据结构通过实例展示如何进行时间复杂度分析。 时间复杂度分析是理解和评估算法性能的重要工具。通过本文的介绍,我们学习了时间复杂度的基本概念、影响因素...

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

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

    数据结构预算法——时间复杂度分析实例课件 数据结构预算法.pdf

    在实际应用中,时间复杂度分析可以应用于各种领域,例如数据结构、数据库、网络协议等。通过对时间复杂度的分析,可以确定算法的性能瓶颈,并且优化算法的设计和实现。因此,时间复杂度分析是计算机科学中一个非常...

    数据结构的基本概念和术语,算法的时间复杂度.html

    数据结构的基本概念和术语,算法的时间复杂度,讲述了数据结构的一些概念点,也就是最基本的一些东西,还有如何计算算法的时间复杂度之类的一些问题及举例

    数据结构算法复杂度题目答案

    在计算机科学中,数据结构和算法的复杂度分析是至关重要的,因为它可以帮助我们评估程序的效率,预测其在大规模数据下的表现。以下是给定题目中涉及的一些知识点。 1. 大O符号(Big-Oh)表示法:大O符号是用来描述...

    数据结构与算法复杂度速查表.zip

    这份资料包含了一个详细的表格,用于快速查看各种常见数据结构(如数组、链表、栈、队列、树、图等)以及算法(如排序、查找、图遍历等)的时间复杂度和空间复杂度。时间复杂度描述了算法执行所需的时间与输入数据量...

    算法 时间复杂度 空间复杂度 经典

    - 若算法仅使用几个变量进行计算,不涉及额外的数据结构,则空间复杂度为 \( O(1) \)。 #### 四、实例分析 假设我们要分析以下两个代码段的时间复杂度: 1. **单层循环:** ```plaintext for(int i = 0; i ; +...

    各种基本数据结构在不同场景下的时间复杂度1

    各种基本数据结构在不同场景下的时间复杂度 在计算机科学中,时间复杂度是指算法执行所需的时间量,它是衡量算法性能的一个重要指标。不同的数据结构在不同的场景下具有不同的时间复杂度,本资源将详细介绍各种基本...

    数组和链表的时间复杂度 (1) 数组和链表.pdf

    不同的数据结构在各种操作下的时间复杂度也各不相同。以数组和链表为例,我们可以看到它们在插入、删除、随机访问等操作中的时间复杂度差异。 数组的时间复杂度: * 插入操作:在数组中,插入操作的时间复杂度为O...

    数据结构中常见的时间复杂度大小比较

    时间复杂度大小比较

    平衡二叉树时间复杂度计算1

    在计算机科学中,平衡二叉树是一种特殊的二叉树数据结构,它的时间复杂度计算是非常重要的。下面我们将详细介绍平衡二叉树的时间复杂度计算。 首先,让我们了解什么是平衡二叉树。平衡二叉树是一种二叉树,其中每个...

    各种排序算法的稳定性和时间复杂度总结

    ### 各种排序算法的稳定性和时间复杂度总结 #### 排序算法的稳定性与时间复杂度概述 在计算机科学中,排序算法是基础且重要的组成部分,用于将一系列数据按照特定顺序排列。排序算法的效率通常由其时间复杂度决定...

    数据结构算法时间复杂度的计算.doc

    数据结构算法时间复杂度的计算.doc

    时间复杂度

    这些内容通常会涵盖基本的数据结构(如数组、链表、树和图)上常见的操作的时间复杂度,以及排序和查找算法的时间复杂度分析。 `time.cpp`文件可能包含了一个使用C++实现的时间测量代码。在C++中,可以使用`&lt;ctime&gt;...

    《算法与数据结构》笔记—算法及时间复杂度

    《算法与数据结构》笔记—算法及时间复杂度 在计算机科学领域中,算法是解决问题的步骤序列。任何算法都需要满足四个基本要求:有输入、无二义性、有限性和有输出性。算法的评价参数之一是时间复杂度,即算法的执行...

Global site tag (gtag.js) - Google Analytics