冒泡与二分法的爱恨纠葛

news2024/9/22 5:37:43

冒泡排序与二分法查找

  • 前言
  • 一、冒泡排序?二分法查找?
  • 二、冒泡排序的原理及使用
    • 1.原理
    • 2.手写冒泡排序思路及实现
      • 代码讲解
      • 效果演示/运行结果
  • 三、二分法查找的原理及使用
    • 1.原理
    • 2.二分法查找思路及实现
      • 运行结果
  • 总结


前言

冒泡排序,编程中,基础的基础,重中之重!什么是冒泡排序,怎么用,什么时候用?
二分法?听过,编程里咋写?咋用?


一、冒泡排序?二分法查找?

简单介绍
冒泡排序?使用两个for循环嵌套给数组进行排序
二分法查找?在有序的数组中找到你所要查找的元素,返回下标

二、冒泡排序的原理及使用

1.原理

众所周知,水泡是有浮力的,水泡越大浮力越大,离水面就越近,所以我们把数组看成一个水瓶,里面的元素是一个个水泡,现在的水泡是大小不一的排列着,采用冒泡排序后,可以将水泡排列成大小规律的顺序。

2.手写冒泡排序思路及实现

我们将数组中的每一个元素拿出来与其他元素进行比较,找到它在这个数组中的位置

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        //冒泡排序
        for(int i = 0;i < arr.length - 1;i++){
            for(int j = 0;j < arr.length - 1 - i;j++){
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

代码讲解

因为思路是要每一个元素都拿出来比较,所以将外层循环的操作看成抓取数组元素的操作,所以外层的循环条件就是从0开始,一直到数组的长度-1,相当于遍历数组,但是为什么i 不是小于等于,还要加-1,一会讲内层循环的操作看成将该元素与该元素后面的元素作比较,所以从 0 开始,重复数组元素个数 - i 遍结束。这样既提高效率,又能一个不落的全部比较一边,接下来就是一个逻辑判断,如果后面位置的元素比当前位置的元素大,那就调换位置(排列的顺序自己去调整,可以最小的在前面,也可以最大的在前面),这里注意到我用了 j 和 j + 1来表示两个位置的元素,所以我们在最开始设置循环条件的时候要在数组个数的基础上再-1,要不然会报错,超出数组长度。

效果演示/运行结果

在这里插入图片描述
这样现在我们的数组中就是按照顺序大小排列好的有序数组了。


三、二分法查找的原理及使用

1.原理

二分法查找,顾名思义,和数学中的二分法很像,没错,使用起来也很像,在数学中,需要使用在单调性统一的函数中,而在我们计算机里,需要使用在有序的数组里,其实道理是一样的,都是使用在数值逐渐增大或减小的目标中,这时候我们的数组如果是无序的,我们就需要用到上面介绍到的冒泡排序将数组变得有顺序。

2.二分法查找思路及实现

思路,传入一个目标值,在数组中获取中间值下标,将目标值与中间值作比较,如果相等,返回目标元素下标,如果不相等,重新赋一个中间值,重复以上操作,知道找到该元素为止。

//二分法查找
        int dest = 64;                  //目标元素
        int head = 0;                   //数组的首位元素下标,用于计算中间值下标
        int end = arr.length - 1;       //数组的末尾元素下标,用于计算中间值下标
        boolean isFlag = true;          //判断找没找到的标志

        //开始查找操作
        while (head <= end){
            int mid = (head + end) / 2;
            if (dest == arr[mid]){
                isFlag = false;
                System.out.println("找到" + dest +"了!该元素在数组中的位置是:" + mid);
                break;
            }else if (arr[mid] > dest){
                end = mid - 1;
            }else{
                head = mid + 1;
            }
        }

        if (isFlag){
            System.out.println("没找到!!!");
        }

这里就是二分法查找的具体实现代码,如果查找的需求多,可以对其修改,将其封装成方法,根据具体需求具体改动,参数列表中放你需要查找的元素。

运行结果

在这里插入图片描述

总结

以上就是冒泡排序与二分法查找的详解,大家在开发实战中要灵活运用,如果这篇文章解决了你的问题,点个关注吧,持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么做好独立站的SEO优化

随着全球贸易的蓬勃发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;并将目光投向了外贸网站。然而&#xff0c;在竞争激烈的外贸市场中&#xff0c;如何写出吸引人的文章&#xff0c;以及如何优化网站以在搜索引擎中脱颖而出&#xff0c;成为了外贸独立网站必须面…

基于spring boot的汽车4s店管理系统

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;汽车4s店管理系统当然不能排除在外。汽车4s店管理系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及SpringBoot框架…

【Windows 常用工具系列 15 -- VMWARE ubuntu 安装教程】

文章目录 安装教程镜像下载 工具安装 安装教程 安装教程参考链接&#xff1a;https://blog.csdn.net/Python_0011/article/details/131619864 https://linux.cn/article-15472-1.html 激活码 VMware 激活码连接&#xff1a;https://www.haozhuangji.com/xtjc/180037874.html…

研究人员发现 OpenAI ChatGPT、Google Gemini 的漏洞

自 OpenAI 推出 ChatGPT 以来&#xff0c;生成式 AI 聊天机器人的数量及其在企业中的采用率在一年多时间里呈爆炸式增长&#xff0c;但网络安全专业人士的担忧也随之增加&#xff0c;他们不仅担心威胁组织对新兴技术的使用&#xff0c;还担心大型网络的安全性及模型&#xff08…

开设新量子计算中心!IonQ 全力加速量子商业化

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨浪味仙 沛贤 深度好文&#xff1a;1000字丨8分钟阅读 近日&#xff0c;量子计算公司IonQ对外宣布&#xff0c;将在华盛顿开设一家新量子中心。公告里还提出&#xff0c…

【随笔】汇编(寄存器、内存模型、常用指令、语法)

文章目录 一、简介二、寄存器三、内存模型3.1 Heap3.2 Stack 四、指令4.1 示例4.2 语法4.3常用指令 一、简介 汇编语言&#xff08;英语&#xff1a;assembly language&#xff09;是任何一种用于电子计算机、微处理器、微控制器&#xff0c;或其他可编程器件的低级语言。在不…

HUAWEI Pocket 2外屏实时查看App动态,小小窗口大便捷

当我们点外卖、等候飞机时&#xff0c;不少人习惯频繁点亮手机查看外卖配送进度、值机时间。 这时候&#xff0c;手机亮屏、解锁、打开对应App查看状态对于我们来说就显得非常繁琐。而华为Pocket 2结合HarmonyOS 4系统的实况窗功能&#xff0c;与常显外屏的搭配使用&#xff0…

PTA黑暗料理

小明最近正开发一个料理手游。游戏中仓库里有一些原材料&#xff0c;每个原材料都不相同。在游戏后台&#xff0c;每个原材料由两个不同整数构成。当烹饪锅有至少N&#xff08;N≥2&#xff09;个原材料且其中有N个原材料正好包含N个不同的整数&#xff08;即这N个整数每个出现…

【Java 数据结构】Map和Set的介绍

目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java 提供了 Map 和 Set 的接口&#xff0c;是一种专门用来进行搜索的容器或数据结构&#xff0c;而他搜索…

【Maven篇】解锁 Maven 的智慧:依赖冲突纷争下的版本调停者

缘起 软件开发世界是一个充满无限可能的领域&#xff0c;但同时也伴随着诸多挑战。其中之一&#xff0c;就是依赖冲突的问题。在这篇文章中&#xff0c;我们将揭开 Maven 这位“版本调停者”的神秘面纱&#xff0c;深入探讨如何在版本纠纷的盛宴中解决依赖问题。 Maven&#…

Ansible的介绍、安装与部署

Ansible的介绍、安装与部署 文章目录 Ansible的介绍、安装与部署1. 介绍 Ansible1.1 什么是 Ansible?1.2 Ansible 无需代理1.3 Ansible 方式 2. 安装需求2.1 控制节点2.2 受管主机2.3 基于Windows的受管主机2.4 受管网络设备 3. 管理Ansible配置文件3.1 配置Ansible3.2 配置文…

JAVA后端调用OpenAI接口 实现打字机效果(SSE)

SSE SSE&#xff08;Server-Sent Events&#xff0c;服务器发送事件&#xff09;是一种基于HTTP协议的通信技术&#xff0c;它允许服务器持续地将数据推送给客户端&#xff0c;而无需客户端发起请求。这种通信方式通常用于实时性要求较高的场景&#xff0c;如实时更新、通知、或…

AJAX-原理XMLHttpRequest

定义 使用 查询参数 定义&#xff1a;浏览器提供给服务器的额外信息&#xff0c;让服务器返回浏览器想要的数据 语法&#xff1a;http://xxxx.com/xxx/xxx?参数名1值1&参数名2值2

敏捷开发——elementUI/Vue使用/服务器部署

1. 创建vue项目 2. 安装element-ui组件库 npm i -S element-ui或 npm install element-ui3. 在main.js中导入element-ui组件 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI)4. 运行 npm run serve后可以使用 ctrc终止进…

C/C++动态链接库的封装和调用

1 引言 静态链接库是在编译时被链接到程序中的库文件&#xff0c;在编译时&#xff0c;链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件&#xff0c;在编译时&#xff0c;可执行文件只包含对动态链接库的引用&#xff0c;而不…

软件杯 深度学习 python opencv 火焰检测识别 火灾检测

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

leetcode 3081

leetcode 3081 题目 例子 思路 使用minheap 记录字符出现频次 代码 class Solution { public:string minimizeStringValue(string s) {int freq[26]{};for(char c: s){if(c ! ?){freq[c-a];}}//std::greater<> 比较器比较 pair 对象时&#xff0c;默认比较规则是先比…

leetcode刷题(javaScript)——动态规划相关场景题总结

动态规划在 JavaScript 刷题中有一定的难度&#xff0c;但也是非常常见和重要的算法思想。动态规划通常适用于需要求解最优解、最大值、最小值等问题的场景&#xff0c;可以将复杂问题拆分成子问题&#xff0c;通过存储子问题的解来避免重复计算&#xff0c;从而提高效率。 理解…

elk收集k8s微服务日志

一、前言 使用filebeat自动发现收集k8s的pod日志&#xff0c;这里分别收集前端的nginx日志&#xff0c;还有后端的服务java日志&#xff0c;所有格式都是用json格式&#xff0c;建议还是需要让开发人员去输出java的日志为json&#xff0c;logstash分割java日志为json格式&#…

Transformer的前世今生 day01(预训练、统计语言模型)

预训练 在相似任务中&#xff0c;由于神经网络模型的浅层是通用的&#xff0c;如下图&#xff1a; 所以当我们的数据集不够大&#xff0c;不能产生性能良好的模型时&#xff0c;可以尝试让模型B在用模型A的浅层基础上&#xff0c;深层的部分自己生成参数&#xff0c;减小数据集…