闲来无事的笔记

如何评价一个排序算法

1.时间复杂度

​ a.最好情况

​ b.最坏情况

​ c.平均情况

​ d.系数和低阶项

2.空间复杂度

原地(store in place)排序:特指空间复杂度为O(1)的排序。

3.稳定性

稳定性:数据集中”相等”的元素,如果排序前和排序后的相对次序不变,那么这个排序就是稳定的。

排序算法

冒泡法:Bubble Sort

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-401JEiK7-1644818712278)(https://upload.wikimedia.org/wikipedia/commons/3/37/Bubble_sort_animation.gif)]

是一种简单的[排序算法]。它重复地走访过要排序的[数列],一次比较两个元素,如果它们的顺序错误就把它们交换过来

这个算法的名字由来是因为小的元素会经由交换慢慢”浮”到数列的顶端,就像水中的气泡会浮到水面上一样。故取名为”冒泡排序”。

性能分析:
  • 最佳时间复杂度:O(n),比较n-1次,交换0次

  • 最坏时间复杂度:O(n^2),比较:n(n-1)/2交换:n(n-1)/2

  • 平均时间复杂度:O(n^2),

  • 辅助空间:O(1)

  • 稳定性:稳定

  • 有序度:数组中有序元素对的个数

  • 逆序度:数组中逆序元素对的个数

  • 满有序度:数组排好序后的有序度。假设数组有n个元素,满有序度 = n(n-1)/2

  • 公式: 满有序度 = 有序度 + 逆序度

  • 有序元素对:arr[i] <= arr[j], i < j

  • 逆序元素对:arr[i] > arr[j], i < j

选择排序:Selection sort

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

性能分析
  • 时间复杂度:O(n^2)

​ 对于选择排序来说,无论什么数据(有序或者无序),经过相同的操作之后都会达到有序。所以没有最好情况和最坏情况之分。

​ 比较:1 + 2 + … + (n-1) = n(n-1)/2

​ 交换:n - 1

  • 空间复杂度: O(1)

  • 稳定性: 不稳定 (元素会发生长距离的交换)

插入排序:Insertion-Sort

是一种简单直观的[排序算法]。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。故名为”插入排序”。

性能分析
  • 时间复杂度

最好情况:数组有序。O(n)

比较:n-1;

交换:0

  • 空间复杂度 O(1)

  • 稳定性:稳定

最好最坏平均空间复杂度稳定性
冒泡O(n)O(n^2)O(n^2)O(1)稳定
选择O(n^2)O(n^2)O(n^2)O(1)不稳定
插入O(1)O(n^2)O(n^2)O(1)稳定

n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
| 插入 | O(1) | O(n^2) | O(n^2) | O(1) | 稳定 |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不好,商鞅要跑

谢谢咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值