首页 > 编程语言 >常见排序算法

常见排序算法

时间:2024-10-18 20:20:13浏览次数:11  
标签:元素 插入排序 常见 插入 算法 有序 排序 复杂度

插入排序

  1. 直接插入排序

    • 原理:一开始将数据分为两部分,初始数据当做无序,每一次从待排序队列中取出一个值,放到已经排序好的队列中,然后将其调整有序,再取下一个值,直到待排序队列中没有值。
    • 调整规则:将待插入的值和有序队列中的所有值从右向左逐个比较,找到一个小于或者等于自己的值,则停下来,插入到当前位置的下一个位置。
    • 特点:时间复杂度为O(n^2),适合小数据量排序;数据越有序,效率越高;是稳定的排序算法,即相等元素的相对顺序在排序前后不会改变。
  2. 折半插入排序

    • 原理:是对直接插入排序的改进,通过折半查找法(也称二分查找法)来加快寻找插入点的速度。
    • 过程:在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为a[high],则每轮比较时将待插入元素与a[m](m=(low+high)/2)相比较,如果比参考元素小,则选择a[low]到a[m-1]为新的插入区域(即high=m-1),否则选择a[m+1]到a[high]为新的插入区域(即low=m+1),如此直至low<=high不成立,即将此位置之后所有元素后移一位,并将新元素插入a[high+1]。
    • 特点:比直接插入排序减少了关键字之间比较的次数,速度更快,但记录移动的次数没有变,所以时间复杂度仍然为O(n^2);是稳定的排序算法。
  3. 希尔排序

    • 原理:是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序先对数据进行了分组,再在组内分别进行插入排序,排序完再对数据分成更小的组进行排序,直到组内只有1个元素的简单插入排序。
    • 分组方法:根据增量increment安排分组,即increment个数分为一组,在数据中表现为每increment个数取一个划为一组。每次分组增量都在递减,递减的规律没有特别规定,一般是取increment为数据长度length的一半,再不断减半到为1。
    • 特点:平均时间复杂度为O(n2)之间;由于在不同小组做插入排序时有较大幅度地变换数据的位次的可能性,所以是不稳定的排序算法。

交换排序

  1. 冒泡排序

    • 原理:通过多次遍历待排序的数列,比较相邻元素的值,并在必要时交换它们的位置,从而将最大的元素逐步“冒泡”到数列的末尾。这个过程会重复进行,直到整个数列有序为止。
    • 特点:时间复杂度在最好情况下为O(n)(数组已经有序时),最坏情况下为O(n2);是稳定的排序算法。
  2. 快速排序

    • 原理:采用分治法的一个非常典型的应用。通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
    • 特点:平均时间复杂度为O(n log n),但在最坏情况下(如数组已经有序)时间复杂度为O(n^2)。

选择排序

  1. 简单选择排序

    • 原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
    • 特点:不稳定排序,时间复杂度为O(n^2),但不需要额外的存储空间。
  2. 堆排序

    • 原理:利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子节点的键值或索引总是小于(或者大于)它的父节点。
    • 特点:不稳定排序,时间复杂度为O(n log n),不需要额外的存储空间。

其他排序

  1. 归并排序

    • 原理:采用分治法的一个应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
    • 特点:稳定排序,时间复杂度为O(n log n),但需要额外的存储空间。
  2. 基数排序

    • 原理:是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
    • 特点:稳定排序,时间复杂度为O(nk),其中n是排序元素个数,k是数字位数。

标签:元素,插入排序,常见,插入,算法,有序,排序,复杂度
From: https://blog.csdn.net/buwangchuxinking/article/details/143061643

相关文章

  • 负载均衡常见的算法有哪些?
    随机法随机法 是最简单粗暴的负载均衡算法。如果没有配置权重的话,所有的服务器被访问到的概率都是相同的。如果配置权重的话,权重越高的服务器被访问的概率就越大。未加权重的随机算法适合于服务器性能相近的集群,其中每个服务器承载相同的负载。加权随机算法适合于服务器性能不......
  • 数据结构与算法 课程随记
    因为有时候需要在不同设备编辑同一份文档,本地不太方便了,先在放着博客园比较省事吧。但是博客园是不是快要四了啊,没事再整一个个人博客吧。内容非常杂,因为不想去上课所以还是有点东西不会,就记录一下查不会东西的时候学会的东西。没什么参考价值。Classhttps://www.runoob.com/c......
  • [学习笔记] Minimax 算法和 Alpha-Beta 剪枝
    题目引入在博弈论中,有这样一类题目:两个玩家A、B轮流行动,A先手,B后手。有一个结果,A想要使它最大,B想要使它最小。Minimax算法把每个状态作为一个点,每个转移作为一条边建出一棵树。这棵树好像叫博弈树。两种实现(都没有真正地建树):直接搜索(可能有结点被重复经过)记忆化......
  • RRT*路径搜索算法matlab代码
    一、算法简介      RRT*路径搜索算法相比于RRT路径搜索算法多了重选父节点和重布线的过程:二、实现效果对比(比RRT算法更光滑) RRT路径搜索算法实现效果RRT*路径搜索算法实现效果三、代码完整代码私聊!......
  • 【智能算法应用】鸭群算法求解二维路径规划问题
    摘要本文研究了鸭群算法在二维路径规划问题中的应用,旨在解决复杂障碍环境下的最优路径搜索问题。通过模拟鸭群觅食行为,鸭群算法能够有效避开障碍物,找到最短路径。实验结果表明,鸭群算法在路径规划中表现出较快的收敛速度和较优的路径规划效果,适用于多种复杂环境下的路径优化......
  • 粒子群算法应用——聚类优化
    粒子群算法详见:https://blog.csdn.net/liutianbao2018/article/details/142743205目录1K均值聚类原理1.1什么是聚类1.2K均值聚类原理2PSO改进K均值聚类3结果对比1K均值聚类原理1.1什么是聚类聚类是一种无监督学习方法,通过相似性度量将数据点划分为多个簇,使得同......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 粒子群算法应用——二维栅格路径规划
    粒子群算法详见:粒子群优化算法及应用-CSDN博客目录1栅格地图1.1 什么是栅格地图1.2栅格地图绘制2基本原理3结果展示1栅格地图1.1 什么是栅格地图栅格地图是一种将环境或地图区域均匀划分为一系列大小一致的网格单元,并为每个单元分配特定属性信息的地图表示方法......
  • 洛谷 P1983 [NOIP2013 普及组] 车站分级(拓扑排序)
    题目传送门解题思路对于每一趟列车,我们可以知道其中没有经过的车站的级别肯定会比经过的车站的级别低。于是,我们可以根据这种关系来建一个图。将等级小的车站往等级大的车站建边。于是,我们可以发现这是一个DAG(有向无环图),所以我们可以拓扑排序。我们从等级最小的车站......
  • 安全帽AI检测算法在工业安全领域的全面解析及开源代码及相关项目
    在各类施工现场,安全帽的佩戴是保障工人生命安全的重要措施。为了确保工人正确佩戴安全帽,安全帽检测算法发挥着关键作用。而在实际应用中,结合AI智能分析网关V4与EasyCVR视频汇聚智能分析平台,更是能将安全帽检测的效果发挥到极致。例如,在某大型建筑工地,通过在施工现场安装多个摄......