十大排序算法(一)

以下是十大排序算法的详细介绍:首先是前5个,后续更新全部。

十大排序算法汇总

**

  1. 冒泡排序(Bubble Sort)

    • 算法思想:重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
    • 时间复杂度:平均和最坏情况都是O(n^2),最好情况是O(n)。
    • 空间复杂度:O(1)。
    • 稳定性:稳定。
    • 操作 :a.从左向右依次对比相邻元素,将较大值交换到右边;
      b.每一轮循环可将最大值交换到最左边
      c.重复1.2两个步骤,直至完成整个数组
    • 图片演示:
  2. 选择排序(Selection Sort)

    • 算法思想:它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
    • 时间复杂度:O(n^2)。
    • 空间复杂度:O(1)。
    • 稳定性:不稳定。
    • 算法简介:a.选择一个元素赋值给中间元素temp,默认选择左边第一个元素,这样左边第一个元素的位置就空出来了;b. 先从最右边的元素开始依次跟temp比较大小,大于等于temp元素的原地不动,遇到小于temp元素的则终止循环,把该元素赋值到左侧空出来的位置,同时左侧索引值自增,这是该元素原来的位置就空出;c. 然后左侧元素开始依次跟temp比较大小,小于等于temp元素的原地不动,遇到大雨temp元素的则终止循环,把该元素赋值到右侧空出来的位置,同时右侧索引值自减;d. 依次循环2,3步,直至左侧索引等于右侧索引,则完成一轮循环,把哨兵赋值到该索引的位置。e. 在分别递归地对temp左右两侧的子数组进行1234步,直至递归子数组只有一个元素则排序完成
    • 图片演示:
  3. 插入排序(Insertion Sort)

    • 算法思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。
    • 时间复杂度:O(n^2)。
    • 空间复杂度:O(1)。
    • 稳定性:稳定。
    • 插入排序简介 : a.左边第一个元素可作为有序子数组;
      b.从第二个元素开始,依次向前比较,大于该元素的则向右移一位,直到比该元素小的元素,插入其后;
      c.依次向后推进,直至整个数组成为有序数组
    • 图片演示 (可以跟扑克牌一样,从小排)
  4. 希尔排序(Shell Sort)

    • 算法思想:也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
    • 时间复杂度:平均时间复杂度为O(nlogn),最坏情况为O(n^2)。
    • 空间复杂度:O(1)。
    • 稳定性:不稳定。
    希尔排序简介:

    a.首先选择一个步长值gap,以步长值为间隔把数组分为gap个子数组gap=length/2

    b.对每个子数组进行插入排序;

    c.逐步减小步长 gap = gap/2,重复对数组进行1,2 步骤;

    d.当步长值减为1时,相当于对数组进行一次直接插入排序。

    • 图像演示:
  5. 快速排序(Quick Sort)

    • 算法思想:通过一个基准值将数据分为两部分,一部分数据比另一部分数据小,则可再对这两部分数据分别进行快速排序,以此类推,可以递归至整个数据集排序完成。
    • 时间复杂度:平均O(nlogn),最坏O(n^2)。
    • 空间复杂度:O(logn)。
    • 稳定性:不稳定。
    • 快速排序的简介:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
    • 图片演示:
  6. 总结:

这些排序算法各有特点和适用场景,选择合适的排序算法需要根据数据集的规模、数据分布和性能需求来决定。

相关推荐
誓约酱1 小时前
(每日一题) 力扣 179 最大数
c语言·c++·算法·leetcode·职场和发展
2301_792185881 小时前
力扣:3305.元音辅音字符串计数
c++·算法·leetcode
奔跑的废柴1 小时前
LeetCode 112. 路径总和 II java题解
java·算法·leetcode·二叉树
南玖yy2 小时前
数据结构完全指南:C语言实现与核心原理剖析
c语言·开发语言·数据结构
笨手笨脚の2 小时前
Redis 源码分析-内部数据结构 ziplist
数据结构·数据库·redis·链表·ziplist
Python数据分析与机器学习2 小时前
《基于大数据的营养果蔬推荐系统的设计与实现》开题报告
大数据·开发语言·人工智能·深度学习·神经网络·算法·计算机视觉
weixin_468466852 小时前
C++蓝桥杯皮亚诺曲线距离求解
c++·算法·蓝桥杯·递归·皮亚诺·pow函数误差·皮亚诺曲线距离
桦04 小时前
每天一道算法题【蓝桥杯】【山脉数组的峰顶索引】
c++·算法·leetcode·蓝桥杯
2301_800895104 小时前
蓝桥杯好数
算法
yngsqq5 小时前
贪心算法和遗传算法优劣对比——c#
算法·贪心算法·c#