当前位置: 首页 > news >正文

用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..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…...

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

fiddler抓包拦截请求转发到其他地址

使用Fiddler拦截请求转发到指定地址方便于本地调试&#xff0c;不需要进行打包切换地址&#xff0c;可以加快问题的确定修复效果 内容&#xff1a; 1&#xff1a;首先给app进行设置代理抓包内容&#xff0c;给进行 https://blog.csdn.net/qq_43717814/article/details/84317038…...

【Shell编程】| if 判断

最近在编写一些测试程序的时候&#xff0c;对if的使用较为片面&#xff0c;很多小的功能都需要去各个地方百度查询&#xff0c;极为不便&#xff0c;因此也想着空闲时候&#xff0c;对if进行详细总结&#xff0c;一来加深印象&#xff0c;二来是为了打造一个if语句的最详细的使…...

Java手动引入Maven依赖的Jar包

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

计算机毕设 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…...

conda取消自动进入base环境

安装conda后取消命令行前出现的base&#xff0c;则默认进入了conda环境&#xff0c;如果想取消每次启动自动激活conda的基础环境。 方法一 每次在命令行通过conda deactivate退出base环境回到系统自带的环境 如果再进入的话&#xff1a; conda deactivate 方法二 1&#…...

【文生图】Stable Diffusion XL 1.0模型Full Fine-tuning指南(U-Net全参微调)

文章目录 前言重要教程链接以海报生成微调为例总体流程数据获取POSTER-TEXTAutoPosterCGL-DatasetPKU PosterLayoutPosterT80KMovie & TV Series & Anime Posters 数据清洗与标注模型训练模型评估生成图片样例宠物包商品海报护肤精华商品海报 一些TipsMata&#xff1a;…...

STM32笔记—DMA

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

机器学习概论

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

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理,批量优化

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…...

小菜React

1、Unterminated regular expression literal, 对于函数就写.ts&#xff0c;有dom元素就写.tsx 2、 The requested module /src/components/setup.tsx?t1699255799463 does not provide an export named Father export default useStore默认导出的钩子&#xff0c;组件引入的…...

新手用mac电脑,对文件的疑问和gpt回应

macOs系统安装软件的疑问 所有问题mac系统文件结构我用mac安装软件&#xff0c;不用像windows一样创建文件夹吗只能安装到Applications文件夹吗安装程序的指南和提供的安装选项是什么软件安装在Applications下的/appName文件夹&#xff0c;它的所有数据都会在该文件夹吗如果卸载…...

LeetCode|动态规划|392. 判断子序列、115. 不同的子序列、 583. 两个字符串的删除操作

目录 一、392. 判断子序列 1.题目描述 2.解题思路 3.代码实现(双指针解法) 4.代码实现&#xff08;动态规划解法&#xff09; 二、115. 不同的子序列 1.题目描述 2.解题思路 3.代码实现&#xff08;C语言版本&#xff09; 4.代码实现&#xff08;C版本&#xff09; …...

vscode 阅读 android以及kernel 源码

在Ubuntu系统中安装vscode 参考文档&#xff1a; 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文档的学习记录&#xff0c;包含对Device Selector、Data Parallel Kernel、Host Accessor、Buffer Destruction、的介绍&#xff0c;最后还有一个小关于向量&#xff08;Vector&#xff09;加法的实例 …...

verilog——移位寄存器

在Verilog中&#xff0c;你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路&#xff0c;用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例&#xff1a; m…...

C++11 多线程学习笔记

1. thread — 线程篇 所需头文件&#xff1a;<thread> 1.1 构造函数 // 1 默认构造函数 thread() noexcept; // 2 移动构造函数&#xff0c;把other的所有权转移给新的thread对象&#xff0c;之后 other 不再表示执行线程。 thread( thread&& other ) noex…...

nn.embedding函数详解(pytorch)

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

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...