Java【06】数组查找(二分查找)、排序(冒泡排序、简单选择排序)

1. 数组的操作
1.1 数组的反转
int[] arrs={3,5,7,8,9};
编写程序,让arrs中的数据进行反转{9,8,7,5,3}

1.2数组的查找
① 顺序查找
从头到尾一个一个的找!
② 二分查找
对数组有一个要求:数组必须是有序(大小)的!
int num=3;
int[] arrs={3,5,7,8,9};//从小-大的顺序

1.3 排序
int[] arrs={3,15,7,28,9};
编写程序,让arrs是有序的!(小-大、大-小)
① 冒泡排序(5个数据)
冒第一个泡,写一个循环,让数组中的最大值出现在数组的最后一个位置
冒第二个泡,写一个循环,让数组中的第二大值出现在数组的最倒数第二个位置
...
两两对比,大值放在后面!5个数数据,冒最大的泡,需要对比多少次?4次
{3,15,7,28,9}
{3,7,15,28,9}
{3,7,15,28,9}
{3,7,15,9,28}

② 简单选择排序
找到数组中的最大值,放在最后一个位置
找到数组中第二大的值,放在倒数第二个位置

{3,15,7,28,9}
int max=28;
int index=3;
将index和最后一个位置进行交换
{3,15,7,9,28}
int max=15;
int index=1;
将index和倒数第二个位置进行交换
{3,9,7,15,28}


示例:数组的反转(两种思路)
public class Demo1{
    public static void main(String[] args){
        int[] arrs={3,5,7,8,9,5};// 6/2=3   5/2=2
        //1. 新建一个数组,然后倒序复制
        /*int[] newArrs=new int[arrs.length];
        for(int i=0,j=arrs.length-1;i<arrs.length;i++,j--){
            newArrs[i]=arrs[j];
        }
        arrs=newArrs;
        
        for(int i=0;i<arrs.length;i++){
            System.out.println(arrs[i]);
        }*/

        //2. 对原数组首尾交换   【设置临时变量,交换值】
        for(int i=0;i<arrs.length/2;i++){
            /*
                0     4     i      arrs.length-i-1
                1     3
            */
            int temp=arrs[i];
            arrs[i]=arrs[arrs.length-i-1];
            arrs[arrs.length-i-1]=temp;
        }
        for(int i=0;i<arrs.length;i++){
            System.out.println(arrs[i]);
        }
        
    }
}


示例:二分查找(数组必须已排序)
public class Demo2{
    public static void main(String[] args){
        int[] arrs={3,5,7,8,9,15,26};
        int num=14;//找num在数组中的位置
        //left和right就是我们查找的范围
        int left=0;
        int right=arrs.length-1;
        int mid=(left+right)/2;//查找范围的中间索引
        int index=-1; //默认设置-1,没找到
        while(left<=right){//循环多少次不清楚!
            if(num==arrs[mid]){
                index=mid;
                break;
            }else if(num>arrs[mid]){//小了
                left=mid+1;
            }else if(num<arrs[mid]){//大了
                right=mid-1;
            }
            mid=(left+right)/2;//mid要从新计算一次
        }
        
        System.out.println(index);
    }
}

输出:
-1


示例:冒泡排序
public class Demo3{
    public static void main(String[] args){
        int[] arrs={3,15,7,28,9};//五个数据,需要冒几个泡呢?4个泡
        for(int j=0;j<arrs.length-1;j++){//控制冒几个泡
            for(int i=0;i<arrs.length-1-j;i++){
                if(arrs[i]<arrs[i+1]){  // 前<后,交换,则按降序排列;反之 arrs[i]>arrs[i+1] 则升序
                    //如果进入if,需要交换位置
                    int temp=arrs[i];
                    arrs[i]=arrs[i+1];
                    arrs[i+1]=temp;
                }
            }
        }
        
        //1. 冒第一个泡
        /*for(int i=0;i<arrs.length-1-0;i++){
            if(arrs[i]>arrs[i+1]){
                //如果进入if,需要交换位置
                int temp=arrs[i];
                arrs[i]=arrs[i+1];
                arrs[i+1]=temp;
            }
        }
        
        //arrs={3,7,15,9,28}
        //将第二个泡,放在倒数第二个位置
        for(int i=0;i<arrs.length-1-1;i++){
            if(arrs[i]>arrs[i+1]){
                //如果进入if,需要交换位置
                int temp=arrs[i];
                arrs[i]=arrs[i+1];
                arrs[i+1]=temp;
            }
        }
        //arrs={3,7,9,15,28}
        //将第三个泡,放在倒数第三个位置
        for(int i=0;i<arrs.length-1-2;i++){
            if(arrs[i]>arrs[i+1]){
                //如果进入if,需要交换位置
                int temp=arrs[i];
                arrs[i]=arrs[i+1];
                arrs[i+1]=temp;
            }
        }*/

        
        for(int i=0;i<arrs.length;i++){
            System.out.println(arrs[i]);
        }
    }
}

输出:
28
15
9
7
3


示例:简单选择排序
public class Demo4{
    public static void main(String[] args){
        int[] arrs={3,15,7,28,9};
        //找第一个最大值及其下标,然后和最后一个位置进行交换
        
        for(int j=0;j<arrs.length-1;j++){//找最大值的次数?4
            int max=arrs[0];
            int index=0;
            for(int i=1;i<arrs.length-j;i++){
                if(arrs[i]>max){ //后>前,交换,则升序
                    max=arrs[i];
                    index=i;
                }
            }
            //   index   和   arrs.length-1-j
            if(index!=arrs.length-1-j){
                int temp=arrs[index];
                arrs[index]=arrs[arrs.length-1-j];
                arrs[arrs.length-1-j]=temp;
            }
        }
        
        
        for(int i=0;i<arrs.length;i++){
            System.out.println(arrs[i]);
        }
    }
}

输出:
3
7
9
15
28


【10】安装 idea
ideaIU-Ultimate-2019.2.3.exe

3. idea的配置
项目中包含n个模块(每一天新建一个新的模块)
新建模块:在项目上,右键->new->module
选择java
jdk要选择自己电脑上安装的jdk1.8(第一次如果没有,后面也是添加一个)
起一个模块名
java0224(项目)->day06(模块)->src(源码)->右键-new-java class(新建java文件)
编写源程序-->编译是自动的-->直接运行

main方法运行不了,解决步骤:
① 在当前项目内创建文件目录out
② 在弹框点击ok后,在最下方有一个目录选择,选择刚刚创建的out目录

项目创建的时候是空项目!(创建非空项目也是需要选择jdk)

    配置目录的介绍:
1. 安装完idea之后,会在c盘默认生成两个目录(idea的所有配置信息)
C:\Users\用户名\.IntelliJIdea2019.2\system和config
2. 如果想要回到刚刚安装的情况!可以将这两个目录删除!(激活也需要重新激活)
3. 详细配置
3.1 运行内存的配置(idea在电脑占多大内存)
idea的安装目录/bin/idea64.exe.vmoptions
-Xms512m
-Xmx1500m
-XX:ReservedCodeCacheSize=500m
3.2 如何打开详细配置界面
(1)显示工具栏
(2)选择详细配置菜单和按钮
3.3 默认启动项目配置
3.4 设置整体主题
(1)选择主题
(2)设置菜单和窗口字体和大小(修改的并不是编辑器的字体大小)
3.5 编辑器
(1)编辑器主题
(2)字体大小与颜色(只修改编辑器的字体大小)
3.6 自动提示功能
3.7 设置编码(编辑器的编码)
必须要配置成utf-8(通用一致)
3.8 设置自动编译
3.9 取消自动更新(必须做的)
3.10 项目的JDK设置

4. 快捷键
- 保存:Ctrl + S
- 剪切:Ctrl + X
- 粘贴:Ctrl + V
- 复制:Ctrl + C
- 全选:Ctlr + A
- 撤销:Ctrl + Z

万能提示:Alt + 回车   ★
使用XX块环绕:Ctrl + Alt + T
在当前光标下一行插入空行开始编辑:Shift + 回车
在当前光标上一行插入空行开始编辑:Ctrl+Alt+回车
复制行:Ctrl+D
删除行:Ctrl + Y
- 单行注释:Ctrl + /
- 多行注释:Ctrl + Shift + /
搜索:ctrl+n
取消:双击shift是搜索

快捷键:idea支持自定义和修改(前期先不要修改)
敲了一个快捷键,但是你不知道是什么?直接问!
5. 模板
main:public static void main(String[] args){}
sout:System.out.println();
soutv:System.out.println("变量名 = " + 变量);
变量.sout/soutv System.out.println("变量名 = " + 变量);
fori:for循环

模板:idea也是可以自定义的(前期先不要自定义)

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

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

相关文章

Redis 基础详解:从入门到精通

在当今互联网应用开发领域&#xff0c;数据存储与处理的性能和效率至关重要。Redis&#xff08;Remote Dictionary Server&#xff09;作为一款开源的、基于内存的键值存储系统&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;被广泛应用于数据库、缓存、消息中间件等场景…

图片转ICO图标工具

图片转ICO图标 可批量操作 下载地址&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/6312c565ec98 这个工具是一个批量图片转ICO图标的神器&#xff0c;有了它&#xff0c;以后再也不用为ICO格式的转换烦恼&#xff01;而且这个软件特别小巧&#xff0c;完全不用安装。…

0基础 | L298N电机驱动模块 | 使用指南

引言 在嵌入式系统开发中&#xff0c;电机驱动是一个常见且重要的功能。L298N是一款高电压、大电流电机驱动芯片&#xff0c;广泛应用于各种电机控制场景&#xff0c;如直流电机的正反转、调速&#xff0c;以及步进电机的驱动等。本文将详细介绍如何使用51单片机来控制L298N电…

Flink 系列之十五 - 高级概念 - 窗口

之前做过数据平台&#xff0c;对于实时数据采集&#xff0c;使用了Flink。现在想想&#xff0c;在数据开发平台中&#xff0c;Flink的身影几乎无处不在&#xff0c;由于之前是边用边学&#xff0c;总体有点混乱&#xff0c;借此空隙&#xff0c;整理一下Flink的内容&#xff0c…

大疆卓驭嵌入式面经及参考答案

FreeRTOS 有哪 5 种内存管理方式&#xff1f; heap_1.c&#xff1a;这种方式简单地在编译时分配一块固定大小的内存&#xff0c;在整个运行期间不会进行内存的动态分配和释放。它适用于那些对内存使用需求非常明确且固定&#xff0c;不需要动态分配内存的场景&#xff0c;优点是…

Java 线程池原理

Java 线程池是一种管理和复用线程的机制&#xff0c;其原理如下&#xff1a; 核心概念 线程池的初始化 &#xff1a;在创建线程池时&#xff0c;需要设置一些关键参数&#xff0c;如核心线程数&#xff08;corePoolSize&#xff09;、最大线程数&#xff08;maximumPoolSize&am…

大模型都有哪些超参数

大模型的超参数是影响其训练效果、性能和泛化能力的关键设置,可分为以下几大类别并结合实际应用进行详细说明: 一、训练过程相关超参数 学习率(Learning Rate) 作用:控制参数更新的步长,直接影响收敛速度和稳定性。过高会导致震荡或过拟合,过低则收敛缓慢。调整策略:初…

路由器断流排查终极指南:从Ping测试到Wireshark抓包5步定位法

测试路由器是否出现“断流”&#xff08;网络连接间歇性中断&#xff09;&#xff0c;需通过多维度排查硬件、软件及外部干扰因素。以下是详细步骤指南&#xff1a; 一、基础环境准备 设备连接 有线测试&#xff1a;用网线将电脑直接连接路由器LAN口&#xff0c;排除WiFi干扰。…

低代码开发:开启软件开发的新篇章

摘要 低代码开发作为一种新兴的软件开发方式&#xff0c;正在迅速改变传统软件开发的模式和效率。它通过可视化界面和预设的模板&#xff0c;使非专业开发者也能够快速构建应用程序&#xff0c;极大地降低了开发门槛和成本。本文将深入探讨低代码开发的定义、优势、应用场景以及…

基于Django汽车数据分析大屏可视化系统项目

基于Django汽车数据分析大屏可视化系统项目 一、项目概述 本项目是一个基于 Python 的汽车数据分析大屏可视化系统&#xff0c;旨在通过直观的可视化界面展示汽车相关数据&#xff0c;帮助用户更好地理解和分析汽车市场动态、车辆性能等信息。系统采用前后端分离的架构&#…

WebRTC通信原理与流程

1、服务器与协议相关 1.1 STUN服务器 图1.1.1 STUN服务器在通信中的位置图 1.1.1 STUN服务简介 STUN&#xff08;Session Traversal Utilities for NAT&#xff0c;NAT会话穿越应用程序&#xff09;是一种网络协议&#xff0c;它允许位于NAT&#xff08;或多重 NAT&#xff09;…

Beta分布--贝叶斯建模概率或比例常用分布

Beta分布是一种定义在区间 ([0, 1]) 上的连续概率分布&#xff0c;常用于描述比例或概率的不确定性。它的形状由两个正参数 (\alpha)&#xff08;alpha&#xff09;和 (\beta)&#xff08;beta&#xff09;控制&#xff0c;能够呈现多种形态&#xff08;如对称、偏态、U型等&am…

深度学习算法:开启智能时代的钥匙

引言 深度学习作为机器学习的一个分支&#xff0c;近年来在图像识别、自然语言处理、语音识别等多个领域取得了革命性的进展。它的核心在于构建多层的神经网络&#xff0c;通过模仿人脑处理信息的方式&#xff0c;让机器能够从数据中学习复杂的模式。 深度学习算法的基本原理…

深入了解linux系统—— 自定义shell

shell的原理 我们知道&#xff0c;我们程序启动时创建的进程&#xff0c;它的父进程都是bash也就是shell命令行解释器&#xff1b; 那bash都做了哪些工作呢&#xff1f; 根据已有的知识&#xff0c;我们可以简单理解为&#xff1a; 输出命令行提示符获取并解析我们输入的指令…

Redux和Vuex

为什么React和Vue需要Redux和Vuex 状态管理需求的演变 #mermaid-svg-GaKl3pkZ82yc1m8E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GaKl3pkZ82yc1m8E .error-icon{fill:#552222;}#mermaid-svg-GaKl3pkZ82yc1m8E…

Kubernetes排错(十三):Pod间偶发超时问题排查

在微服务架构中&#xff0c;Pod间偶发的通信超时是最令人头疼的问题之一。本文将通过生产环境中的真实案例&#xff0c;手把手教你定位这类"幽灵问题"。 一、快速定位问题方向&#xff08;5分钟缩小范围&#xff09; 1. 基础检查三板斧 # 检查Service与Endpoint映…

Nginx 源码安装成服务

一、环境准备 一台装有 CentOS 7.9 的虚拟机&#xff08;IP: 192.168.40.81&#xff09;nginx-1.21.6.tar.gz 安装包一个&#xff08;版本随意&#xff09; 二、安装 1&#xff09;解压 nginx-1.21.6.tar.gz tar -xzvf nginx-1.21.6.tar.gz -tar&#xff1a;这是一个在 Linu…

L51.【LeetCode题解】438. 找到字符串中所有字母异位词(四种方法)

目录 1.题目 2.分析 暴力解法 方法1:排序(超时) 方法2:哈希表(险过) ★判断两个哈希表是否相同算法(通用方法,必须掌握) 能相等的前提:两个哈希表的大小相等 哈希表有迭代器,可以使用范围for从头到尾遍历 提交结果 优化方法:定长滑动窗口 提交结果 使用哈希数组更快…

Qt模块化架构设计教程 -- 轻松上手插件开发

概述 在软件开发领域,随着项目的增长和需求的变化,保持代码的可维护性和扩展性变得尤为重要。一个有效的解决方案是采用模块化架构,尤其是利用插件系统来增强应用的功能性和灵活性。Qt框架提供了一套强大的插件机制,可以帮助开发者轻松实现这种架构。 模块化与插件系统 模…

深入理解 HashMap 的索引计算:右移与异或的作用

在 Java 中&#xff0c;HashMap 是一种高效的数据结构&#xff0c;它通过将键映射到数组中的索引位置来实现快速的插入和查找。但之前看源码总是理解到它要hash之后散列到数组中某一个位置&#xff0c;但却从未深究它究竟怎么散列的&#xff0c;如果不够散那就意味着hash冲突增…