Java进阶学习笔记36——算法

什么是算法?

解决某个实际问题的过程和方法。

1)导航;

2)滴滴打车;

3)抖音;

不同的算法,效率高、性能好!

在Java中,代码已经帮我们写好了,但为什么我们还要学习算法呢?

提升编程思维。

有些面试官就是问一些算法题。

算法是程序员的高级之路。

排序算法:

升序排序:由小到大;

降序排序:由大到小;

冒泡排序

选择排序

学习算法的技巧和路径:

1、搞清楚、理解算法的流程;

2、直接去推敲如何写代码;

冒泡排序:

每轮从数组中找出最大值放到数组的后面去。

两个两个地进行比较。

package cn.ensource.d1_algorithm;import java.util.Arrays;public class Test1 {public static void main(String[] args) {// 1. 准备一个数组int[] arr = {5, 1, 2, 3};// 定义一个循环,控制排几轮for (int i = 0; i < arr.length - 1; i++) {// i = 0  1 2//  定义一个循环控制每轮比较几次for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
//        for (int i = 0; i < arr.length; i++) {
//            System.out.println(arr[i]);System.out.println(Arrays.toString(arr));}
}

实现冒泡排序的关键步骤分析:

1)确定总共需要做几轮:数组的长度减一;

2)每轮比较的次数:

选择排序:

每轮选择当前位置,开始找出后面的较小值与该位置进行交换;

定位选择较小值。

package cn.ensource.d1_algorithm;import java.util.Arrays;public class Test2 {public static void main(String[] args) {// 1. 准备好一个数组int[] arr = {5, 1, 3, 2};// 2. 控制选择几轮for (int i = 0; i < arr.length - 1; i++) {// i = 0 1 2    j = 1 2 3  j = 2 3 j = 3//// 控制每轮选择几次for (int j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}System.out.println(Arrays.toString(arr));}
}

算法优化:

找到后面较小值的索引,然后只要交换一次。

package cn.ensource.d1_algorithm;import java.util.Arrays;public class Test2 {public static void main(String[] args) {// 1. 准备好一个数组int[] arr = {5, 1, 3, 2};// 2. 控制选择几轮for (int i = 0; i < arr.length - 1; i++) {// i = 0 1 2    j = 1 2 3  j = 2 3 j = 3//// 控制每轮选择几次int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {minIndex = j;}}// 决定是否交换if (minIndex != i) {int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}System.out.println(Arrays.toString(arr));}
}

基本查找:

顺序查找:

注意:在数据量很大的时候,基本查找这种从前往后挨个找的形式,性能差,效率地下。

二分查找、折半查找:

前提条件:数组中的数据必须是有序的。

核心思想:每次排除一半的数据,查询数据的性能明显提高很多。

package cn.ensource.d1_algorithm;public class Test3 {public static void main(String[] args) {// 1. 准备好一个数组int[] arr = {7, 23, 79, 81, 103, 127, 131, 147};System.out.println("索引值为:" + binarySearch(arr, 81));System.out.println("索引值为:" + binarySearch(arr, 150));}public static int binarySearch(int[] arr, int target) {int low = 0;int high = arr.length - 1;// 2. 定义一个循环控制折半while (low <= high) {             // 两个位置重合// 3. 每次折半,都算出中间位置处的索引int mid = (low + high) / 2;if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {// 往右边找,起始位置发生变化low = mid + 1;} else {high = mid - 1;}}return -1;}
}

我们再看看API文档中是怎么写这个二分法查找算法的。

 >>>是java中的移位运算符,表示无符号右移。

若对char,byte 或者short 进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5 个低位才会用到。这样可防止我们在一个int 数里移动不切实际的位数。若对一个long 值进行处理,最后得到的结果也是long。此时只会用到右侧的6 个低位,防止移动超过long 值里现成的位数。

掌握编程思想;

面试。 

我们再看我当时学Python的时候,学习二分法的方法:

https://changchunhua.blog.csdn.net/article/details/128228704

 

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

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

相关文章

雪花算法详解及源码分析

雪花算法的简介&#xff1a; 雪花算法用来实现全局唯一ID的业务主键&#xff0c;解决分库分表之后主键的唯一性问题&#xff0c;所以就单从全局唯一性来说&#xff0c;其实有很多的解决方法&#xff0c;比如说UUID、数据库的全局表的自增ID 但是在实际的开发过程中&#xff0…

离散点云拟合三维平面参数推导(基于最小二乘)

1、背景介绍 实际中&#xff0c;很多人工构造物是由平面结构构造而成&#xff0c;如下图所示&#xff0c;为一典型的由多个平面组成的人工构筑物。因此&#xff0c;根据离散点拟合成平面&#xff0c;获取拟合平面方程&#xff0c;是点云数据处理中非常常见的数据处理操作。 2、…

鸿蒙Ability Kit(程序框架服务)【ExtensionAbility组件】

ExtensionAbility组件 ExtensionAbility组件是基于特定场景&#xff08;例如服务卡片、输入法等&#xff09;提供的应用组件&#xff0c;以便满足更多的使用场景。 每一个具体场景对应一个[ExtensionAbilityType]&#xff0c;开发者只能使用&#xff08;包括实现和访问&#…

WPS的excel表格设置了编辑权限,要怎么取消?

在日常生活和工作中&#xff0c;我们经常会使用WPS Office办公软件来处理各种文档&#xff0c;其中WPS Excel表格是我们进行数据处理和分析的重要工具。为了保护表格中的数据不被随意修改&#xff0c;我们有时会设置编辑权限。然而&#xff0c;随着时间的推移或需求的变更&…

基于FPGA的SystemVerilog练习

文章目录 一、认识SystemVerilogSystemVerilog的语言特性SystemVerilog的应用领域SystemVerilog的优势SystemVerilog的未来发展方向 二、流水灯代码流水灯部分testbench仿真文件 三、用systemVerilog实现超声波测距计时器测距部分led部分数码管部分采样部分顶层文件引脚绑定效果…

鲁教版七年级数学下册-笔记

文章目录 第七章 二元一次方程组1 二元一次方程组2 解二元一次方程组3 二元一次方程组的应用4 二元一次方程与一次函数5 三元一次方程组 第八章 平行线的有关证明1 定义与命题2 证明的必要性3 基本事实与定理4 平行线的判定定理5 平行限的性质定理6 三角形内角和定理 第九章 概…

dpdk uio整体分析及网卡加载

参考:https://zhuanlan.zhihu.com/p/477600165 一、Linux内核知识点 1. __attribute__ constructor/destructor (1)若函数被设定为constructor属性,则该函数会在 main()函数执行之前被自动的执行。 (2)若函数被设定为destructor属性,则该函数会在main()函数执…

开发和渗透偷懒利器utools

目录 1.前言 1.1 工具简介 1.2 核心特性 1.3 使用场景 1.4 安装与使用 1.4.1 下载&#xff1a; 1.4.2 安装&#xff1a; 1.4.3 配置&#xff1a; 1.4.4 插件市场&#xff1a; 2.懒狗插件介绍 基本介绍 2.1 数据模拟 2.2 随机生成虚假数据 2.3 API市场 2.4 Hoppscot…

【十二】图解mybatis日志模块之设计模式

图解mybatis日志模块之设计模式 概述 最近经常在思考研发工程师初、中、高级工程师以及系统架构师各个级别的工程师有什么区别&#xff0c;随着年龄增加我们的技术级别也在提升&#xff0c;但是很多人到了高级别反而更加忧虑&#xff0c;因为it行业35岁年龄是个坎这是行业里的共…

一文读懂数据库中的DB、DBMS、DBS、DBAS

目前数据库的应用非常广泛,几乎各行各业都在直接或间接地与数据库打交道,例如网上购物、银行业务、铁路购票和酒店住宿等。在实际应用中,数据库、数据库管理系统、数据库系统和数据库应用系统经常被统称为数据库,而实质上这4个概念是不一样的,它们具有不同的定义和含义。下…

暴力数据结构之排序大杂烩

1. 冒泡排序&#xff1a;O(N^2) 逻辑解析&#xff1a; 冒泡排序并没有什么实际意义&#xff0c;但是有教学意义&#xff0c;相信大部分小白在学习的初期第一个接触的排序就是冒泡排序。那么接下来我们了解一下他的底层逻辑&#xff1a; 冒泡排序顾名思义就是将最大&#xff08…

PID——调参的步骤

第一步&#xff1a;确定比例增益P 确定比例增益 P 时&#xff0c;首先去掉 PID 的积分项和微分项&#xff0c;一般是令 Ti0、 Td0&#xff08;具体见PID 的参数设定说明&#xff09;&#xff0c;使PID 为纯比例调节。 输入设定为系统允许的最大值60%~70%&#xff0c;由0逐渐加…

idea项目maven下载依赖报错

报错&#xff1a; 1、Failure to find bad.robot:simple-excel:jar:1.0 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forc…

python的while循环与for循环总结

前两章中&#xff0c;我们跟着海绵宝宝的故事&#xff0c;掌握了 while 循环和 for 循环&#xff0c;这两种不同的循环模式。while 循环和 for 循环都需要有 循环体 和 缩进&#xff0c;我们来复习一下它俩的语法规则&#xff1a; while 循环与 for 循环辨析 学到这里&#x…

Microsoft Edge TTS引擎实现文字转语音小工具

Microsoft Edge TTS引擎实现文字转语音小工具 ​ 看了一篇文章关于使用Microsoft Edge TTS引擎进行文本转语音的介绍。正好单位工作上经常用到音视频的制作和转换。但是文字变成音频一直都是播音员口播实现。现在到了AI时代,各种功能强大的AI大模型已经应用到各个领域,大大提…

Docker镜像导入导出

Docker镜像导入导出 相关命令 docker export 容器id > x:/xx/xx.tar ##导出容器快照 docker import - x:/xx/xx.tar ##导入容器快照 docker save 镜像id > x:/xx/xx.tar ##导出镜像 docker load < x:/xx/xx.tar ##导入镜像命令详解 docker save …

在鲲鹏服务器搭建k8s高可用集群分享

高可用架构 本文采用kubeadm方式搭建k8s高可用集群&#xff0c;k8s高可用集群主要是对apiserver、etcd、controller-manager、scheduler做的高可用&#xff1b;高可用形式只要是为&#xff1a; 1. apiserver利用haproxykeepalived做的负载&#xff0c;多apiserver节点同时工作…

nginx反向代理了解

文章目录 Nginx反向代理反向代理系统调优Proxy Buffer相关指令 Nginx 具有高性能的http和反向代理的web服务器&#xff0c;同时也是一个pop3/smtp/imap代理服务器&#xff0c;使用c语言编写 **Web服务器&#xff1a;**也叫网页服务器&#xff0c;web server&#xff0c;主要功…

易联众智慧云胶片平台,助推医学影像服务“向云端”

在门诊室里,张女士焦急地告诉主治医师,自己忘了带CT胶片。“您别急,我用系统查询一下。”医生轻点几下鼠标进入云胶片平台,只用不到10秒就顺利完成了影像调取。“不仅我可以看到,您在手机上也能随时随地查阅。”张女士根据提示操作,不仅能调阅自己的影像档案,连抽血化验结果都可…

Spring MVC 启动流程?

在 web.xml 文件中给 Spring MVC 的 Servlet 配置了 load-on-startup&#xff0c;所以程序启动的时候会初始化 Spring MVC&#xff0c;在 HttpServletBean 中将配置的 contextConfigLocation属性设置到 Servlet 中&#xff0c;然后在FrameworkServlet 中创建了 WebApplicationC…