博客
关于我
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
阅读量: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/

    你可能感兴趣的文章
    【自考】之信息资源管理(一)
    查看>>
    setup facatory9.0打包详细教程(含静默安装和卸载)
    查看>>
    java.security.InvalidKeyException: Illegal key size
    查看>>
    Linux kernel pwn --- CSAW2015 StringIPC
    查看>>
    IDEA 找不到 Persistence窗口解决办法
    查看>>
    C++ Primer Plus读书笔记:循环读取(错误处理)
    查看>>
    Form窗体属性
    查看>>
    vue 错误收集
    查看>>
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>
    00013.05 字符串比较
    查看>>
    Effective Java 读书笔记
    查看>>
    SpringBoot使用@Email报错误
    查看>>
    访问servlet时弹出文件下载框解决方法
    查看>>
    IDEA-@Slf4j和log标签&@Data(Lombok)无效
    查看>>
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    Thymeleaf 生成下标,索引,使用Stat变量
    查看>>
    初始微服务---Springcloud发展【第一期】
    查看>>
    RAFT 拜占庭将军 共识算法
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>
    cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
    查看>>