美文网首页
各大排序的性质分析

各大排序的性质分析

作者: 乘瓠散人 | 来源:发表于2018-07-22 23:09 被阅读29次
  1. 排序算法可以分为两类:
  • 内部排序是指在排序期间元素全部存放在内存中
  • 外部排序是指在排序期间元素无法全部同时存放在内存中,必须在排序过程中根据要求不断地在内外存之间移动

内部排序算法的性能取决于算法的时间和空间复杂度,而时间复杂度一般是由比较和移动的次数来决定的。

  1. 希尔排序:又称缩小增量排序
    基本思想:先将待排序表分成若干个形如 L[i, i+d, i+2d, ... , i+kd] 的子表,分别进行直接插入排序,当整个表中的元素已经基本有序时,再对全体记录进行一次直接插入排序。

  2. 快速排序
    快速排序的时间效率与划分是否对称有关。最坏情况下两个区域分别包含n-1个元素和0个元素,这种最大程度的不对称性若发生在每一层递归上,即初始排序表基本有序或基本逆序时,就得到最坏情况下的时间复杂度O(n^2)。
    有多种方法提高快排的效率:一种是当递归过程划分得到的子序列规模较小时不再继续递归调用快排,而是采用直接插入排序进行后续的排序工作。另一种方法是尽量选取一个可以将数据中分的基准元素,比如随机从当前表中选取基准元素,使得最坏情况基本不发生。
    在快速排序中并不产生有序子序列,但每一趟排序将一个基准元素放到其最终位置上

  3. 堆排序
    建堆的时间复杂度为O(n),说明可以在线性时间复杂度内将一个无序数组建成一个大顶堆。
    然后输出堆顶元素,再将堆底元素送入堆顶,此时堆被破坏,将堆顶元素向下调整使其继续保持大顶堆的性质,再输出堆顶元素。如此重复n-1次,直到堆中只剩下一个元素为止。
    建堆时间为O(n),之后有n-1次向下调整,每次调整的时间与树高有关,时间复杂度为O(h),故堆排序的时间复杂度为O(nlogn)。

  4. 归并排序
    归并排序需要n个单元的辅助空间用来进行合并操作,空间复杂度为O(n)
    每一趟归并的时间复杂度为O(n),共需进行logn趟归并,所以时间复杂度为O(nlogn)

  5. 基数排序
    空间效率:一趟排序需要辅助空间为r(r个队列),r为数字的基数,比如10。但在以后的排序中重复使用这些队列,故基数排序的空间复杂度为O(r)
    时间效率:需要进行d 趟分配和收集,d为关键字的位数,一趟分配需要O(n),即将各个元素送入相应队列中;一趟收集需要O(r),即把r个队列中的结点依次首尾相接,得到新的结点序列,从而组成新的线性表。所以基数排序的时间复杂度为O(d(n+r)),它与序列的初始状态无关。

  6. 总结
    直接插入排序和冒泡排序在最好情况下的时间复杂度可以达到O(n),而简单选择排序与序列的初始状态无关,始终为O(n^2)。
    归并排序分割子序列与初始序列的排列无关,因此它的最好、最坏和平均时间复杂度均为O(nlogn)。
    插入排序,冒泡排序,归并排序和基数排序都是稳定的排序方法,而简单选择排序,快速排序,希尔排序和堆排序都是不稳定的排序方法。
    快速排序和堆排序都是不稳定的,如果要求排序稳定并且时间复杂度为O(nlogn),则可以选用归并排序 。

相关文章

  • 各大排序的性质分析

    排序算法可以分为两类: 内部排序是指在排序期间元素全部存放在内存中 外部排序是指在排序期间元素无法全部同时存放在内...

  • 堆排序原理以及代码解析

    前言 堆排序是排序算法的一种,相对来说较难理解,本文分析了堆排序的原理,并且剖析了源码。 堆定义 堆是具有以下性质...

  • 归并排序

    闲来无事,总结一下排序算法,感觉快要忘光啦。 对几个关键性质进行分析: 时间复杂度:归并排序的时间复杂度为O(nl...

  • 算法和数据结构

    1. 排序 快速排序: 冒泡排序: 插入排序: 希尔排序: 堆排序:堆是具有以下性质的完全二叉树:每个节点的值都...

  • 《犯罪现场勘查》笔记(4)现场分析的内容

    一.分析判断案件性质 1.分析案件性质。分析案件性质就是分析现场上已经发生的事件是否属于犯罪事件,即罪与非罪的界定...

  • 排序学习 - 为了面对算法面试(4)

    排序学习 - 为了面对算法面试(3) -快速排序 6.堆排序: 堆排序是利用堆的性质进行的一种选择排序方法原理:1...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 十、分析与概括:可计算模型下的人或动物的动机、认知、思维原理

    1. 与思维活动相关的性质分析及性质的表示字母 与思维活动相关的性质分析:至少存在以下性质:  需要一个身体(机...

  • 算法-排序-希尔排序

    由来 希尔排序是根据插入排序来实现的。 希尔排序根据插入排序的以下两点性质而提出的改进方法: 1.插入排序在对...

  • 数据结构基础学习之(内排序)

    学习知识 排序基本概念 插入排序的实现方法及性能分析 交换排序的实现方法及性能分析 选择排序的实现方法及性能分析 ...

网友评论

      本文标题:各大排序的性质分析

      本文链接:https://www.haomeiwen.com/subject/aeermftx.html