美文网首页
十大排序算法的复杂度、排序方式、稳定性

十大排序算法的复杂度、排序方式、稳定性

作者: 星光下的胖子 | 来源:发表于2021-04-18 09:41 被阅读0次
相关概念
  • 1.算法复杂度
    • 时间复杂度:是指执行算法所需要的时间(计算工作量)。
      • 语句频度/时间频度:一个算法中的语句执行次数,记为T(n)。
    • 空间复杂度:是指执行这个算法所需要的内存空间。
  • 2.排序方式
    • 根据是否需要借助额外的数组来辅助排序,分为:
      • In-place:不需要借助额外的数组,直接对待排序数组中的元素进行比较和交换。
      • Out-place:需要利用额外的数组来辅助排序。
    • 举例:冒泡排序,不需要借助额外数组,直接对待排序数组的相邻元素两两比较和交换,属于In-place。计数排序,需要一个额外的计数数组来辅助排序,属于Out-place。
  • 3.稳定性
    • 稳定:等值元素的先后顺序,排序前后“不”发生改变,称这种排序算法是稳定的。
      • 包括:冒泡排序,直接插入排序,归并排序,计数排序,桶排序,基数排序。
    • 不稳定:等值元素的先后顺序,排序前后“可能”发生改变,称为不稳定的。
    • 包括:快速排序,希尔排序,简单选择排序,堆排序。
总结十大排序算法的复杂度、排序方式、稳定性
原理简述
  • 1.冒泡排序
    1)比较相邻的元素,如果前一个比后一个大,就交换它们。
    2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这样一轮比较结束,最大的数被移动到了最后的位置。
    3)针对所有的元素重复以上的步骤,除了最后一个。
    4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  • 2.快速排序
    1)先从数列中取出一个数作为基准数。
    2)分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
    3)再对左右区间重复第二步,直到各区间只有一个数。
    更多参考「快速排序」,对挖坑填数进行总结:

    • 1.i=L; j=R; 将基准数挖出形成第一个坑a[i]。
    • 2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
    • 3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
    • 4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。
  • 3.直接插入排序
    1)先将数组arr分为左右两部分,左侧sorted_list=[arr[0]],右侧unsorted_list=arr[1:]。
    2)依次遍历unsorted_list列表中的元素a:

    • 元素a与sorted_list中的元素b从后向前依次进行比较;
    • 满足条件a<b或a>b(根据排序顺序确定)时,b元素往后移动一格;
    • 直到最终不满足条件时,将元素a填入sorted_list中的索引空位。
  • 4.希尔排序
    1)取序列长度的一半(向下取整)作为增量gap,对序列进行分组。
    2)然后对各组进行“直接插入排序”。
    3)增量gap依次减半(向下取整),重复1)、2),最终一次的增量gap为1。
  • 5.简单选择排序
    第一轮找最小的数并放到第一个位置。
    第二轮找第二小的数并放到第二个位置。
    依次迭代...
  • 6.堆排序
    1)把无序数组构建成二叉堆(若从小到大排序,则构建成最大堆)。
    2)将堆顶元素与二叉堆末尾元素进行替换(此时,最后一个元素已经排序好了)。
    3)对剩余未排序的元素,循环重复1)、2)。
  • 7.归并排序
    二路归并排序:将序列不断二分为多个子序列,对子序列从上到下依次进行排序合并。
  • 8.计数排序
    定义一个计数数组,统计每个元素出现的次数。
  • 9.桶排序
    先分桶,每个桶代表一个数值区间范围,将元素放入对应桶中。
    然后,对每个桶分别进行排序(可递归调用桶排序)。
    最后,合并所有的桶即可。
  • 10.基数排序
    取数组中最大元素的位深(个、十、百...)。
    按个位分桶,然后取出。
    按十位分桶,然后取出。
    依次类推...

相关文章

  • 排序算法总结

    1. 排序算法 1.1. 排序算法比较 排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性冒泡排序O(n...

  • 十大经典排序算法&七大查找算法

    十大经典排序算法: 十大经典排序算法的时间、空间复杂度: 冒泡排序(Bubble Sort) 算法描述: 1、比较...

  • 数据结构算法 - 冒泡、选择和插入排序

    排序算法我们一般可以从以下几个方面入手: 手写排序算法; 时间复杂度,空间复杂度,排序的稳定性; 能够了解各大排序...

  • 数据结构算法 - 冒泡、选择和插入排序

    排序算法我们一般可以从以下几个方面入手: 手写排序算法; 时间复杂度,空间复杂度,排序的稳定性; 能够了解各大排序...

  • C语言十大经典排序算法(动态演示+代码,值得收藏)!

    § 时间、空间复杂度比较 排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性 1、冒泡排序 算法思想: ...

  • 归并排序的Java实现

    归并排序算法的原理如下: 归并排序的时间复杂度:,空间复杂度:,稳定性:稳定

  • 算法(四)-排序

    一、排序分类 简单写下如下4种排序: 排序算法平均时间复杂度空间复杂度稳定性冒泡排序O(n2)O(1)稳定选择排序...

  • java (查找和排序)

    1.查找 递归形式: 二分查找: 2.排序方式 下面这个表格总结了各种排序算法的复杂度与稳定性: 冒泡排序 特点:...

  • Go:实现经典排序算法

    经典排序算法 排序算法在时间复杂度上分为三个档次:O(n),O(nlgn),O(n^2) 排序算法的稳定性。如果待...

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

网友评论

      本文标题:十大排序算法的复杂度、排序方式、稳定性

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