当前位置: 首页 > 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函…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...