用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--;
        }

    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈智能变电站自动化系统的应用与产品选型

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;现如今&#xff0c;智能变电站发展已经成为了电力系统发展过程中的内容&#xff0c;如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标&#xff0c;为了能够更好地促进电力系统安全稳定运行&#xff0c;…

轻量封装WebGPU渲染系统示例<22>- 渲染到纹理(RTT)(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/RTTTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class RTTTest {private mRscene new RendererScene()…

使用 Threejs 从基础开始构建 3D 地球

需求 threejs学习-3D 地球 实现&#xff1a; 1、使用粒子效果模拟宇宙星空 2、贴图、模型等资源的加载 3、加载资源的监听 4、效果合成器 EffectComposer 的初级使用 5、在地球上设置坐标以及坐标涟漪动画 6、标点间建立飞线 7、简单动画建议先浏览一遍git地址上代码&#xff…

SpringMVC简介

SpringMVC简介 一、MVC是什么二、什么是SpringMVC&#xff1f;1.特点 三、简单实现 一、MVC是什么 MVC是模型视图控制器的简称&#xff0c;是指一种架构思想。 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据。 JavaBean分为…

A Survey on Neural Network Interpretability

A Survey on Neural Network Interpretability----《神经网络可解释性调查》 摘要 随着深度神经网络的巨大成功&#xff0c;人们也越来越担心它们的黑盒性质。可解释性问题影响了人们对深度学习系统的信任。它还与许多伦理问题有关&#xff0c;例如算法歧视。此外&#xff0c;…

基于Python的书籍数据采集与可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 基于Python的书籍数据采集与可视化分析系统旨在挖掘和分析海量图书数据背后的规律和趋势&#xff0c;为读者、出版商和数据分析师提供更深入的洞察和辅助决策。本系统依托于某瓣庞大的图书…

JS逆向爬虫---请求参数加密②【某麦数据analysis参数加密】

主页链接: https://www.qimai.cn/rank analysis逆向 完整参数生成代码如下&#xff1a; const {JSDOM} require(jsdom) const dom new JSDOM(<!DOCTYPE html><p>hello</p>) window dom.windowfunction customDecrypt(n, t) {t t || generateKey(); //…

20 VPN详解

1、连接数据中心 1.第一种方式是走公网&#xff0c;但是公网太不安全 2.第二种方式是专线&#xff0c;但是比较贵 3.VPN连接2、vpn的概念 全名Virtual Private Network&#xff0c;虚拟专用网&#xff0c;就是利用开放的公众网络&#xff0c;建立专用数据传输通道&#xff0c…

洛谷P5731 【深基5.习6】蛇形方阵java版题解

import java.util.Arrays; import java.util.Scanner;// 给出一个不大于9的正整数n&#xff0c;输出nn的蛇形方阵。 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] a new int[n][n];int total…

《016.SpringBoot+vue校园社团管理系统》【有文档】

《016.SpringBootvue校园社团管理系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMyBatisPlus; 前台&#xff1a;vueElementUI; [2]功能模块展示&#xff1a…

HCIP---VLAN

文章目录 目录 目录 文章目录 前言 一.VLAN概述 作用&#xff1a; 二.VLAN基础认识 VLAN ID: VLAN端口类别 总结 前言 VLAN技术是现代企业网络和数据中心网络的核心技术之一。本文将重点针对VLAN技术进行详解。 一.VLAN概述 VLAN&#xff08;Virtual Local Area Network…

自动化实战 - 测试个人博客系统

前言 本篇使用Selenium3Junit5对个人博客进行自动化测试&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言一.web自动化测试用例二.测试准备1.注册界面自动化测试测试过程中遇到的Bug: 2.登录界面自动…

Java基础——数组(一维数组与二维数组)

文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习杨辉三角冒泡排序线性查找二分法数组反转 数组是多个相同类型的数据按一定顺序排列的集合。 说明&#xff1a; 数组是引用数据类型&#xff0c;数组的元素是同一类型的任何数据类型&…

【C#学习笔记】事件

前言 在之前我学习委托的时候&#xff0c;写到了 学习了委托&#xff0c;事件其实也就学习了&#xff0c;事件和委托基本上一模一样&#xff1a; 然而在实际工作中通过对事件的深入学习后发现&#xff0c;实际上事件的使用比委托要严格一些&#xff0c;本节将详细讲解事件的使…

介绍两个好用又好玩的大模型工具

先让数字人跟大家打个招呼吧。 我的AI数字人会手语了 发现没&#xff0c;我的数字人本周又学了一个新技能&#xff1a;手语。 这些数字人都是通过AI生成的。 但数字人不是今天的主题&#xff0c;今天要跟大家聊聊大模型。 自从大模型出现后&#xff0c;很多人&#xff08;包…

20行JS代码实现屏幕录制

在开发中可能有遇到过屏幕录制的需求&#xff0c;无论是教学、演示还是游戏录制&#xff0c;都需要通过屏幕录制来记录和分享内容。一般在App内H5页基于客户端能力实现的较多&#xff0c;现在浏览器中的 MediaRecorder 也提供了这种能力。MediaRecorder 是一种强大的技术&#…

Mybatis(一)

1. Mybatis简介 MyBatis下载地址 1.1 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c;iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github…

【遍历二叉树的非递归算法,二叉树的层次遍历】

文章目录 遍历二叉树的非递归算法二叉树的层次遍历 遍历二叉树的非递归算法 先序遍历序列建立二叉树的二叉链表 中序遍历非递归算法 二叉树中序遍历的非递归算法的关键&#xff1a;在中序遍历过某个结点的整个左子树后&#xff0c;如何找到该结点的根以及右子树。 基本思想&a…

4个杀手级Pycharm高效插件

本文将介绍4个学习Python的人都应该安装的Pycharm插件&#xff0c;通过这些插件提高工作效率并使Pycharm看起来更美观。 1、简介 Pycharm是Python最受欢迎的集成开发环境之一。它具有良好的代码助手、漂亮的主题和快捷方式&#xff0c;使编写代码变得简单快捷。 话虽如此&…

深度学习中的图像增强合集

引言 图像增强是我们在深度学习领域中绕不开的一个话题&#xff0c;本文我们将讨论什么是图像增强&#xff0c;并在三个不同的 python 库中实现它&#xff0c;即 Keras、Pytorch 和 augmentation&#xff08;专门用于图像增强的一个库&#xff09;。所以第一个问题就是什么是图…