[算法] 排序方法复杂度、稳定性汇总

对几种排序方法进行简单总结。

排序类型 时间复杂度 空间复杂度 稳定性
冒泡排序 O(N^2) O(1) 稳定
插入排序 O(N^2) O(1) 稳定
选择排序 O(N^2) O(1) 不稳定
希尔排序 O(N^2) O(1) 不稳定
堆排序 O(NlogN) O(1) 不稳定
快速排序 O(NlogN) O(logN) 不稳定
归并排序 O(NlogN) O(N)  稳定
时间: 2024-10-06 00:45:57

[算法] 排序方法复杂度、稳定性汇总的相关文章

【每日算法】排序算法总结(复杂度&稳定性)

一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一开始左手是空的,接着右手开始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们需要从右到左将它与手中的牌比较,直到找到合适的位置插入.整个过程的特点是,左手的牌是排好序的了. 详见: 插入排序 二.选择排序:不稳定,时间复杂度O(n^2) 每趟从未排序部分选出最小的元素,然后通过交换将其添加到已排序部分中. 详见: 选择排序 三.冒泡排序:稳定,时间复杂度O(n^2) 将待排序的元素看作是竖着排列的"气泡

排序算法的时空复杂度、稳定性分析

1.基本概念 2.时空复杂度 3.稳定性 4.使用情况分析 排序算法总结(C语言版)已介绍排序算法的基本思想和C语言实现,本文只介绍时空复杂度和稳定性. 1.基本概念 时间复杂度: 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法的语句执行次数称为语句频度或时间频度.记为T(n).n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化.但有时我们想知道它变化时呈现什么规律,为此,引入时间复杂度概念.若有某个辅助函数f(n),使得当n趋近

排序方法的比较

首先给出各个排序方式的性能比较: 排序方法的比较 类别 排序方法 时间复杂度 空间复杂度 稳定性 平均情况 最好情况 最坏情况 辅助存储 插入排序 直接插入 O(n2) O(n) O(n2) O(1) 稳定 希尔排序 O(n1.3) O(n) O(n2) O(1) 不稳定 选择排序 直接选择 O(n2) O(n2) O(n2) O(1) 不稳定 堆排序 O(nlog2n) O(nlog2n) O(nlog2n) O(1) 不稳定 交换排序 冒泡排序 O(n2) O(n) O(n2) O(1) 稳

【Java】九大排序算法总结(复杂度及应用场景)

1.冒泡排序,不管序列是怎样,都是要比较n(n-1)/2 次的,最好.最坏.平均时间复杂度都为O(n²),需要一个临时变量用来交换数组内数据位置,所以空间复杂度为O(1). 优化:使用一个标志位来判断是否有序,若果有序,那么循环一次就直接退出,时间复杂度为O(n). 2.选择排序是冒泡排序的改进,同样选择排序无论序列是怎样的都是要比较n(n-1)/2次的,最好.最坏.平均时间复杂度也都为O(n²),需要一个临时变量用来交换数组内数据位置,所以空间复杂度为O(1). 3.插入排序,如果序列是完全有

算法 - 内部排序方法总结

各种排序方法的性能比较 排序方法 最好时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 直接插入排序 O(n) O(n2) O(n2) O(1) 稳定 简单选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 冒泡排序 O(n) O(n2) O(n2) O(1) 稳定 希尔排序 - O(n1.25) - O(1) 不稳定 快速排序 O(nlog2n) O(nlog2n) O(n2) O(log2n)~O(n) 不稳定 堆排序 O(nlog2n) O(nlog2n) O(n

笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)

四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成正比: 前三种算法在平均,最坏情况下都是N2,而且都不需要额外的内存:所以尽管他们的运行时间只相差常数倍,但运行方式不同: 对于已经就序的序列而言,插入排序和冒泡排序的运行时间都是O(N),但是选择排序的时间仍旧是O(N^2): 因为Insertion和Bubble都是相邻项间的比较交换,所以不会出

各种排序方法的时间复杂度、空间复杂度和稳定性统计表

排序法  最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1)  快速排序 O(n2) O(n*log2n)  不稳定 O(log2n)~O(n) 选择排序 O(n2) O(n2) 稳定 O(1)  二叉树排序 O(n2) O(n*log2n)  不一定 O(n) 插入排序 O(n2) O(n2) 稳定 O(1)  堆排序 O(n*log2n)  O(n*log2n)  不稳定 O(1)  希尔排序 O O 不稳定 O(1) 各种排序方法的时间复杂度

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

各种排序方法

排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序