首页 > 编程语言 >列举常见的排序和查找算法

列举常见的排序和查找算法

时间:2024-06-07 10:33:43浏览次数:28  
标签:Sort 元素 算法 查找 原理 排序

在编程和算法设计中,排序和查找算法是非常基础和重要的。以下是常见的一些排序和查找算法:

排序算法

  1. 冒泡排序(Bubble Sort)
    • 原理:重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
  2. 插入排序(Insertion Sort)
    • 原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
  3. 选择排序(Selection Sort)
    • 原理:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
  4. 希尔排序(Shell Sort)
    • 原理:是插入排序的一种更高效的改进版本,也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。
  5. 归并排序(Merge Sort)
    • 原理:采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
  6. 快速排序(Quick Sort)
    • 原理:通过一次排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
  7. 堆排序(Heap Sort)
    • 原理:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。
  8. 计数排序(Counting Sort)
    • 原理:不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
  9. 桶排序(Bucket Sort)
    • 原理:是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:首先,要使得数据分散得尽可能均匀;其次,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
  10. 基数排序(Radix Sort)
    • 原理:按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。

查找算法

  1. 顺序查找(Sequential Search)
    • 原理:从列表的一端开始,顺序搜索直到找到元素或搜索到列表的另一端。
  2. 二分查找(Binary Search)
    • 原理:在一个有序的数组中查找一个特定的元素,搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
  3. 哈希查找(Hashing)
    • 原理:通过计算一个关于键值的函数,将所需查询的数据映射到表中的一个位置来访问记录,从而加快查找的速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
  4. 插值查找(Interpolation Search)
    • 原理:是介于顺序查找和二分查找之间的一种改进型查找算法,基于二分查找算法,将查找点的选择方法与被查元素的分布规律有机结合,以提高查找效率。
  5. 斐波那契查找(Fibonacci Search)
    • 原理:斐波那契数列查找是在二分查找的基础上的优化。在二分查找中,每次数组被划分为两半,而斐波那契查找每次划分的是斐波那契数列中的两个数。通过运用黄金比例的概念在数列中选择中点来消除数据的集合。然后再把消除的集合与被查找的元素进行比较。这两种查找算法在每一步都消除一个数据项。

标签:Sort,元素,算法,查找,原理,排序
From: https://blog.csdn.net/m0_46552684/article/details/139465139

相关文章

  • 数据结构与算法-17_排序算法
    文章目录1.概述比较排序算法非比较排序算法稳定vs不稳定Java中排序2.冒泡排序3.选择排序4.堆排序5.插入排序6.希尔排序7.归并排序递归实现时间复杂度非递归实现8.归并+插入9.快速排序随机基准点处理重复值10.计数排序11.桶排序12.基数排序习题E01.根据另一个数组......
  • 一文教你在MindSpore中实现A2C算法训练
    本文分享自华为云社区《MindSporeA2C强化学习》,作者:irrational。AdvantageActor-Critic(A2C)算法是一个强化学习算法,它结合了策略梯度(Actor)和价值函数(Critic)的方法。A2C算法在许多强化学习任务中表现优越,因为它能够利用价值函数来减少策略梯度的方差,同时直接优化策略。A2C算......
  • LLM大语言模型算法特训,带你转型AI大语言模型算法工程师
    LLM大语言模型算法特训,带你转型AI大语言模型算法工程师 LLM(大语言模型)是指大型的语言模型,如GPT(GenerativePre-trainedTransformer)系列模型。以下是《LLM大语言模型算法特训,带你转型AI大语言模型算法工程师》课程可能包含的内容:1.深入理解大语言模型:课程可能会介绍大......
  • 基于java ssm vue mysql协同过滤算法的电影推荐系统(源码+lw+部署文档+讲解等)
    前言......
  • 代码随想录算法训练营 第三天 链表 Leetcode203 移除链表元素 Leetcode707 设计链表 L
    Leetcode203移除链表元素 题目链接注意为了使后续节点方式统一 要人为设置链表头节点链表的处理一定要明白如何找前置节点/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*L......
  • Java实现常见的排序算法
    ......
  • 关于Solidity脚本相关环境配置及脚本数据的查找
    来源:在solidity安全中心做题时,有些题需要通过脚本进行计算,可以是JavaScript也可以是python的脚本,solidity安全方面初次接触可能不清楚该如何运行solidity的相关脚本。下面我来分开说说JavaScript和Python对应的环境配置python篇:首先确保你的电脑中存在Python环境Python安装......
  • Meta最新路径搜索算法 Beyond A*: Better Planning with Transformers via Search Dyn
    这篇论文前两个月刚刚放出,研究了如何让人工智能(AI)更好地解决复杂的规划问题,比如在迷宫中寻找最短路径,或者推箱子游戏(Sokoban)中把箱子全部推到指定位置。传统上,这类问题通常使用专门的规划算法来解决,比如A*搜索算法。但是,训练AI模型(如Transformer)来解决这些问题......
  • 算法金 | 有史以来最详细的卷积神经网络(CNN)及其变体讲解!!!(多图)
    大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]0.前言卷积神经网络(ConvolutionalNeuralNetworks,CNN)是人工智能领域中一种重要的深度学习模型,被广泛应用于图像识别、目标检测、自然语言处理等领域。它的出现标志......
  • 算法金 | 再见,PCA 主成分分析!
    ​大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]1.概念:数据降维的数学方法定义主成分分析(PCA)是一种统计方法,通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,这组新的变量称为主成分。大白话,PCA能够......