博客
关于我
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
阅读量:685 次
发布时间:2019-03-17

本文共 1281 字,大约阅读时间需要 4 分钟。

顺序查找

顺序查找是一种最基础的查找算法,适用于数组或列表中按照顺序查找特定元素的场景。其工作原理是从数组的开头逐个检查每个元素,直到找到与目标值相等的元素为止。如果找到,则结束查找过程;如果完全遍历完数组但未找到目标值,则标记为未找到。

示例:

考虑一个简单的数组 [3, 1, 2, 5, 4],目标值为2。顺序查找的过程如下:

  • 检查第一个元素3,与目标值2不等。
  • 检查第二个元素1,仍不等。
  • 第三个元素2,等于目标值,查找结束。
  • 返回索引2。
  • 如果目标值不存在于数组中,则返回-1或其他表示未找到标志。

    折半查找

    折半查找(Binary Search)是一种高效的查找算法,特别适用于已排序数组。其核心思想是通过不断缩小查找范围,从而快速定位目标值。

    步骤:

  • 计算中间索引值 mid
  • 比较目标值与 mid 的大小:
    • 若相等,目标值已找到。
    • 若目标值小于 mid,需查找左边的子数组(从 firstmid-1)。
    • 若目标值大于 mid,需查找右边的子数组(从 mid+1last)。
  • 重复上述步骤,直到找到目标值或确定其不存在。
  • 示例:

    在已排序数组 [1, 2, 3, 4, 5] 中查找目标值5:

  • first=0last=4mid=2,值为3。5>3,转向右边。
  • 新的 last=4mid=(3+4)/2=3,值为4。5>4,继续右边。
  • 新的 first=4,此时值为5,找到目标值。
  • 如果目标值不存在于数组中,则开始时的数组为空,或者最后一次循环结束时未找到目标值。

    ###冒泡排序

    冒泡排序是一种简单有效的排序算法,其核心在于通过一系列交换操作,将最大值逐步移至数组末尾。

    原理:

  • 每趟排序:

    • 通过比较数组中连续元素,向后交换较大的元素。
    • 每完成一趟排序,数组最大值已确定在正确位置。
  • 过程:

    • 进行 N-1 趟排序,数组将完全排序为有序数组。
  • 示例:

    对数组 [3, 2, 1] 进行冒泡排序:

  • 第一趟:

    • 3与2比较,交换 → [2, 3, 1]
    • 3与1比较,交换 → [2, 1, 3]
  • 第二趟:

    • 2与1比较,交换 → [1, 2, 3]
  • 完成两趟排序后数组已排序。

    选择排序

    选择排序的核心在于每次从未排序区间中选择最小值,将其移动至已排序区间的末尾。

    步骤:

  • 初始化: 已排序的子数组为空,未排序区间为整个数组。
  • 每次选择:
    • 找到未排序区间中的最小值及其索引 i
    • 将该最小值与已排序区间的最后一个元素交换。
  • 重复: 直到未排序区间为空。
  • 示例:

    对数组 [4, 3, 1, 2, 5] 进行选择排序:

  • 第一趟:

    • 最小值是1,索引为2。
    • 交换1与最后一个元素:数组变为 [4, 3, 2, 1, 5]
  • 第二趟:

    • 最小值是1,索引为3。
    • 交换1与最后一个元素:数组变为 [4, 3, 2, 5, 1]
  • 第三趟:

    • 最小值是2,索引为2。
    • 交换2与最后一个元素:数组变为 [4, 3, 5, 1, 2]
  • 第四趟:

    • 最小值是1,索引4。
    • 交换1与最后元素(已经本来是2):排列完成。
  • 需要 N-1 趟排序后数组即为有序。

    转载地址:http://etfez.baihongyu.com/

    你可能感兴趣的文章
    浏览器打开winscp 系统错误。代码:5。 拒绝访问。
    查看>>
    Oracle Listener动态注册与静态注册(转载)
    查看>>
    Kubernetes 无法查询到并且无法删除pod实例的排查过程
    查看>>
    android中button修改不了背景颜色
    查看>>
    uniapp自定义弹窗组件|仿微信android/ios弹窗效果
    查看>>
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    查看>>
    (网络安全)主动信息收集 操作系统识别
    查看>>
    奥比中光体积最小的3D刷脸模组发布,智能锁设计要迎来颠覆?
    查看>>
    Class和ClassLoader的getResource方法对比
    查看>>
    redis教程-redis环境搭建安装(qq:1197852132)
    查看>>
    将jsp页面转化为图片或pdf升级版(二)(qq:1197852132)
    查看>>
    pdf转图片(qq:1197852132)
    查看>>
    一套简单的web即时通讯——第一版
    查看>>
    Day5 - 05 函数的参数-关键字参数
    查看>>
    github 入门
    查看>>
    cpp
    查看>>
    温故知新,.Net Core遇见Consul(HashiCorp),实践分布式服务注册与发现
    查看>>
    可编辑列表(json文件,可编辑,添加等)
    查看>>
    学生信息管理系统之增(五):添加用户信息流程
    查看>>
    C++面向对象程序设计实践——任务与指导书(2)
    查看>>