用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
目录
一、冒泡排序
1.冒泡排序介绍
2.排序的思路
3.完整代码
二、折半查找
1.折半查找介绍
2.查找的思路
3.完整代码
三、逆序数组
1.逆序思路
2..完整代码
一、冒泡排序
冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据结构中也会用到
1.冒泡排序介绍
(1)冒泡排序思想
- 为两两排序,每次的排序后,最大(或最小的)就会升起到最后
- 每完成一轮排序,需要比较的数就少一个
(2)冒泡排序场景
- 多用于对数组内容的排序
2.排序的思路
(1)完成排序需要的内容
- 有数组
- 需要求数组长度
(2)排序的过程解析
-
我们将下面数组排序成升序
int[] arr = {10,9,8,7,6,5,4,3,2,1};
- 第一趟冒泡排序:10个数需要比较9次,成功把一个数字排好序
- 第二趟冒泡排序:待排序的数字有9个,所以需要比较的次数是8次
后续的排序趟数是类似的,接下来我们总结一下规律
- 由上图可知:10个数字一共需要比较的趟数是10-1次,也就是(arr.length-1)
- 第一趟排序需要比较的次数为9,第二次是8;与趟数有关系,于是得出下面的代码
int i =0;for (i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1-i; j++) {//可自己设置条件条件if(arr[j]>arr[j+1]) {//完成两个数字的交换int tmp = arr[j+1];arr[j+1] = arr[j];arr[j] = tmp;}}}
- 升序的条件是第一个数大于第二个数就要交换;如果是排逆序则是第一个数小于第二个数则需要交换
3.完整代码
import java.util.Arrays;public class Sort{
public static void main(String[] args) {//冒泡排序int[] arr = {10,9,8,7,6,5,4,3,2,1};bubbleSort(arr);System.out.println(Arrays.toString(arr));}public static void bubbleSort(int[] arr) {//升序int i =0;for (i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1-i; j++) {if(arr[j]>arr[j+1]) {int tmp = arr[j+1];arr[j+1] = arr[j];arr[j] = tmp;}}}}
}
二、折半查找
1.折半查找介绍
(1)折半查找,又称二分查找。
(2)二分查找每次都是从中间位置开始查找,因此称为折半查找(二分查找)
(3)可以进行二分查找的条件
- 数组内的数据必须是有序的
- 若是无序的,可以先将其排成有序
2.查找的思路
(1)方法的参数写法
- 我们规定一下:找到了就返回它的下标位置,否则返回-1
- 需要将数组和需要查找的数据传给下面的方法
public static int binarySearch(int[] arr,int k) {}
(2)查找的内部细节
- 定位下标:定好两头位置,便于找到中间位置
public static int binarySearch(int[] arr,int k) {int left = 0;int right = arr.length-1;}
- 中间数字表示:
int mid = (left+right)/2;
(3)二分查找的过程解析
- 先看代码
public static int binarySearch(int[] arr,int k) {int left = 0;int right = arr.length-1;while(left <= right) {//从中间位置开始找int mid = (left+right)/2;if(k < arr[mid]) {//k在左边right=mid-1;} else if(k > arr[mid]) {//在右边left=mid+1;} else {return mid;}}return -1;}
- 查找过程图解 :第一次查找
- 第二次查找:查找后,right指向10,left和mid都指向8
- 第三、四次查找:找到了就返回mid位置的下标
3.完整代码
public static void main(String[] args) {//1.折半查找,要求数组内容为有序.找到了返回下标int[] arr1 = {2,5,7,8,10,11,15,17,20,22};int ret = binarySearch(arr1,10);System.out.println(ret);//2.当数组无序时,使用Array.sort排序后折半查找int[] arr2 = {9,8,7,6,5,4,3,2,1,0};Arrays.sort(arr2);System.out.println(Arrays.toString(arr2));int cur = binarySearch(arr2,11);System.out.println(cur);}public static int binarySearch(int[] arr,int k) {int left = 0;int right = arr.length-1;while(left <= right) {//从中间位置开始找int mid = (left+right)/2;if(k < arr[mid]) {//k在左边right=mid-1;} else if(k > arr[mid]) {//在右边left=mid+1;} else {return mid;}}return -1;}
三、逆序数组
1.逆序思路
(1)要求将数组内容逆序,不是逆序打印
int[] arr = {10,9,8,7,6,5,4,3,2,1,0};
(2)设置头尾位置
public static void reverse(int[] arr) {int left = 0;//头位置int right =arr.length-1;//尾位置 }
这样是为了从两头开始交换数据
(3)循环交换数据
while(left < right) {//相等的时候就不需要逆序了int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}
内部代码其实就是实现两个数的交换;当left==right的时候,就是只剩下一个数据没有完成交换了,其实也就不需要再交换了(非要交换也行)
2..完整代码
public static void main(String[] args) {//逆序数组int[] arr = {10,9,8,7,6,5,4,3,2,1,0};reverse(arr);System.out.println(Arrays.toString(arr));}public static void reverse(int[] arr) {int left = 0;int right =arr.length-1;while(left < right) {//相等的时候就不需要逆序了int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}}
相关文章:

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据…...
antd本地上传excel文件并读取文件的数据转为json
1.写一个上传 这里直接用upload组件即可 <Upload {...uploadProps} maxCount{1} accept{".xlsx"}><Button icon{<UploadOutlined />}>{${formatMessage({id: clk_upload}, {file: formatMessage({id: excel_file})})}}</Button></Uploa…...

BI数据可视化:不要重复做报表,只需更新数据
BI数据可视化是一种将大量数据转化为视觉形式的过程,使得用户可以更容易地理解和分析数据。然而,传统的报表制作过程往往需要手动操作,不仅耗时还容易出错。为了解决这个问题,BI数据可视化工具通常会提供一些自动化的数据更新功能…...

fiddler抓包拦截请求转发到其他地址
使用Fiddler拦截请求转发到指定地址方便于本地调试,不需要进行打包切换地址,可以加快问题的确定修复效果 内容: 1:首先给app进行设置代理抓包内容,给进行 https://blog.csdn.net/qq_43717814/article/details/84317038…...
【Shell编程】| if 判断
最近在编写一些测试程序的时候,对if的使用较为片面,很多小的功能都需要去各个地方百度查询,极为不便,因此也想着空闲时候,对if进行详细总结,一来加深印象,二来是为了打造一个if语句的最详细的使…...

Java手动引入Maven依赖的Jar包
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…...

计算机毕设 基于大数据的社交平台数据爬虫舆情分析可视化系统
文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕…...
conda取消自动进入base环境
安装conda后取消命令行前出现的base,则默认进入了conda环境,如果想取消每次启动自动激活conda的基础环境。 方法一 每次在命令行通过conda deactivate退出base环境回到系统自带的环境 如果再进入的话: conda deactivate 方法二 1&#…...

【文生图】Stable Diffusion XL 1.0模型Full Fine-tuning指南(U-Net全参微调)
文章目录 前言重要教程链接以海报生成微调为例总体流程数据获取POSTER-TEXTAutoPosterCGL-DatasetPKU PosterLayoutPosterT80KMovie & TV Series & Anime Posters 数据清洗与标注模型训练模型评估生成图片样例宠物包商品海报护肤精华商品海报 一些TipsMata:…...

STM32笔记—DMA
目录 一、DMA简介 二、DMA主要特性 三、DMA框图 3.1 DMA处理 3.2 仲裁器 3.3 DMA通道 扩展: 断言: 枚举: 3.4 可编程的数据传输宽度、对齐方式和数据大小端 3.5 DMA请求映像 四、DMA基本结构 4.1 DMA_Init配置 4.2 实现DMAADC扫描模式 实现要求…...

机器学习概论
一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术 2…...

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理,批量优化
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…...

小菜React
1、Unterminated regular expression literal, 对于函数就写.ts,有dom元素就写.tsx 2、 The requested module /src/components/setup.tsx?t1699255799463 does not provide an export named Father export default useStore默认导出的钩子,组件引入的…...
新手用mac电脑,对文件的疑问和gpt回应
macOs系统安装软件的疑问 所有问题mac系统文件结构我用mac安装软件,不用像windows一样创建文件夹吗只能安装到Applications文件夹吗安装程序的指南和提供的安装选项是什么软件安装在Applications下的/appName文件夹,它的所有数据都会在该文件夹吗如果卸载…...
LeetCode|动态规划|392. 判断子序列、115. 不同的子序列、 583. 两个字符串的删除操作
目录 一、392. 判断子序列 1.题目描述 2.解题思路 3.代码实现(双指针解法) 4.代码实现(动态规划解法) 二、115. 不同的子序列 1.题目描述 2.解题思路 3.代码实现(C语言版本) 4.代码实现(C版本) …...
vscode 阅读 android以及kernel 源码
在Ubuntu系统中安装vscode 参考文档: https://blog.csdn.net/m0_57368670/article/details/127184424 1, 下载vscode https://code.visualstudio.com 2, 安装vscode $ sudo dpkg -i code_1.78.1-1683194560_amd64.deb 3, 打开vscode $ code vscode 阅读 android…...

Intel oneAPI笔记(3)--jupyter官方文档(SYCL Program Structure)学习笔记
前言 本文是对jupyterlab中oneAPI_Essentials/02_SYCL_Program_Structure文档的学习记录,包含对Device Selector、Data Parallel Kernel、Host Accessor、Buffer Destruction、的介绍,最后还有一个小关于向量(Vector)加法的实例 …...
verilog——移位寄存器
在Verilog中,你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路,用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例: m…...
C++11 多线程学习笔记
1. thread — 线程篇 所需头文件:<thread> 1.1 构造函数 // 1 默认构造函数 thread() noexcept; // 2 移动构造函数,把other的所有权转移给新的thread对象,之后 other 不再表示执行线程。 thread( thread&& other ) noex…...

nn.embedding函数详解(pytorch)
提示:文章附有源码!!! 文章目录 前言一、nn.embedding函数解释二、nn.embedding函数使用方法四、模型训练与预测的权重变化探讨 前言 最近发现prompt工程(如sam模型),也有transform的detr模型等都使用了nn.Embedding函…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...