美文网首页
排序算法总结

排序算法总结

作者: MaxLiao | 来源:发表于2017-11-06 12:23 被阅读13次

排序算法大体可分为两种:
    一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。
    另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序等。

算法名称 原理 发明时间 发明人 平均时间复杂度 最坏时间复杂度 最优时间复杂度 空间复杂度(辅助空间) 稳定性
冒泡排序(Bubble Sort) 重复地遍历要排序的序列,一次比较两个元素,如果它们顺序错误就把它们交换过来。 O(n^2) O(n^2) O(n) O(1) 稳定
选择排序(Selection Sort) 在未排序序列中找到最小(大)元素,存放到已排序序列的末尾。 O(n^2) O(n^2) O(n^2) O(1) 不稳定
插入排序(Insertion Sort) 对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 O(n^2) O(n^2) O(n) O(1) 稳定
希尔排序(Shell Sort) 将待比较的所有元素分为几个区域,让一个元素可以一次性地朝最终位置前进一大步。 1959 Donald Shell 根据步长序列的不同而不同 根据步长序列的不同而不同。已知最好的: O(n(logn)^2) O(n) O(1) 不稳定
归并排序(Merge Sort) 将两个已经排序的序列合并成一个序列。 1945 冯·诺伊曼 O(nlogn) O(nlogn) O(n) O(n) 稳定
快速排序(Quick Sort) 使用分治策略把一个序列分为两个子序列,其中一个子序列所有元素的键值都比基准小,另一个都比基准大。 1962 托尼·霍尔(Tony Hoare) O(nlogn) O(n^2) O(nlogn) 根据实现方式不同而不同 不稳定
堆排序(Heap Sort) 堆是一棵完全二叉树,其子节点的键值总是小于(或大于)它的父节点。 1964 罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams) O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
基数排序(Radix Sort) 将整数按位数切割成不同的数字,然后按每个位数进行比较。 1887 赫尔曼·何乐礼(Herman Hollerith) O(kn) O(n+k) 稳定
计数排序(Counting Sort) 把键值作为计数数组的索引。 1954 Harold H. Seward O(n+k) O(n+k) O(n+k) O(n+k) 稳定

相关文章

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 面试常问的排序算法

    排序算法总结 排序是算法问题中的经典问题。为什么要总结排序算法呢?你懂的 : (假设所有的排序都是要求最终结果为:...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...

  • Swift的十大经典排序算法总结

    Swift的十大经典排序算法总结 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排...

  • 算法-排序算法总结

    排序类型总结 1 排序算法基础实现 2 排序算法应用 2.1 基础排序 2.2 计数排序应用 2.3 快排应用 2...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

网友评论

      本文标题:排序算法总结

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