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.rhkb.cn/news/339972.html

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

相关文章

【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、深入理解并利用零值提升代码质量1.1 深入Go类型零值原理1.2 零值可用性的实践与优势1.2.1 切片(Slice)的零值与动态扩展1.2.2 Map的零值与安全访问1.2.3 函数参数与零值 二、使用复合字面值作为初值构造器2.1 结构体…

C语言 链表经典OJ题

链表经典OJ题 移除链表元素链表的中间节点反转链表合并两个有序链表分割链表 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head […

iOS18新功能大爆料,打破常规,全面升级,这些变化不容错过!

众所周知&#xff0c;苹果 iOS 操作系统近年来都没有发生重大变化&#xff0c;主要是添加小部件、锁屏编辑和手机屏幕编辑等功能&#xff0c;再加上bug偏多&#xff0c;以至于越来越多iPhone用户不愿意再升级系统了。这一点&#xff0c;从 iOS 17 明显降低的安装率中就能看出一…

Linux配置java,maven,marshalsec环境

文章目录 一. Linux配置java环境1.下载jdk文件2.解压tar.gz文件3.设置java环境变量4.验证是否成功 二. Linux配置maven环境1.下载压缩包2.解压tar.gz3. 配置环境变量 三. Linux配置marshalsec环境 一. Linux配置java环境 1.下载jdk文件 mkdir /opt/javawget https://repo.hua…

Mixly 开启WIFI AP UDP收发数据

一、开发环境 软件&#xff1a;Mixly 2.0在线版 硬件&#xff1a;ESP32-C3&#xff08;立创实战派&#xff09; 固件&#xff1a;ESP32C3 Generic(UART) 测试工工具&#xff1a;NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP&#xff0c;打印接入点IP地址&#xff0c;允许…

几百页资料要打印哪里打印便宜

在这个信息爆炸的时代&#xff0c;资料堆积如山成为了许多人的常态。无论是学生准备期末考试、论文&#xff0c;还是职场人士整理项目文档、合同&#xff0c;打印需求总是如影随形。面对厚厚的几百页资料&#xff0c;你可能会为去哪里打印既便宜又方便而犯愁。别急&#xff0c;…

Amazon云计算AWS(二)

目录 三、简单存储服务S3&#xff08;一&#xff09;S3的基本概念和操作&#xff08;二&#xff09;S3的数据一致性模型&#xff08;三&#xff09;S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB&#xff08;一&#xff09;非关系型数据库与传统关系数据库的比较&…

UI 自动化测试(Selenuim + Java )

关于 UI 自动化测试工具 selenuim Java 的环境搭建推荐看SeleniumJava 环境搭建 什么是自动化测试&#xff1f; 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测…

教育新基建背景下的光网校园:安徽中澳科技职业学院以太全光网建设之路

作者/安徽中澳科技职业学院 网络中心 刘正峰 安徽中澳科技职业学院隶属于安徽省科技厅,是一所公办高等职业院校。学院在“德厚三分,技高一筹”的校训指引下,坚持“开放性、精品化、技能型”的发展理念,坚持“贴近市场需求、强化实践教学、突出办学特色、培养实用人才”的办学思…

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…

【vue】@、@/、../和./的区别

&#xff1a;表示vue语法中v-on的简写&#xff1b;绑定事件的专用格式。当事件触发的时候&#xff0c;函数才会来调用&#xff1b; /&#xff1a;在build文件夹下webpack.base.conf.js找到&#xff0c;便能知道代表什么了; 这里指向src文件夹 . /&#xff1a;表示当前目录下&…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

云渲染农场什么是线程模式?

许多设计师在选择云渲染农场时&#xff0c;常常会遇到48线程、56线程、72线程等选项&#xff0c;然而&#xff0c;不少新手在面对这些选择时&#xff0c;往往无法直观地感受到不同线程数量之间的差异。接下来&#xff0c;我们将共同探讨线程的作用和影响&#xff0c;帮助大家更…

「小白必读」国内超火的 8 款 AI 大模型,你的副业都来自它

大家好&#xff0c;最近好多朋友在问我&#xff0c;国内是否有好用的大模型&#xff0c;今天我就整理好 8 款大模型&#xff0c;大家可以多尝试&#xff0c;一定会有不一样的感觉。 01 HOTSPOT Kimi 网址&#xff1a;https://kimi.moonshot.cn/ Kimi 是由月之暗面科技有限公…

Anacode+YOLO识别图片

一、安装Anacoda 因为我原本是已经安装了python&#xff0c;后面直接卸载了&#xff0c;然后安装了最新版的anacoda 下载网址为&#xff1a; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载版本是&#xff1a; 按照安装教程直接…

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

介绍 手上有一块立创开发板&#xff0c;本着不吃灰的原则把它用起来&#xff0c;今天就来用它来连接上自己部署的MQTT服务器进行数据通信。 硬件&#xff1a;立创开发板 开发环境&#xff1a;Arduino IDE Win11 MQTT 平台&#xff1a;EMQX Platform 立创开发板介绍&#xff1…

nginx和proxy_protocol协议

目录 1. 引言2. HTTP server的配置3. Stream server的配置3.1 作为proxy_protocol的前端服务器3.2 作为proxy_protocol的后端服务器1. 引言 proxy_protocol 是haproxy开发的一种用于在代理服务器和后端服务器之间传递客户端连接信息的协议。使用 proxy_protocol 的主要优势是能…

Redis中大Key与热Key的解决方案

原文地址&#xff1a;https://mp.weixin.qq.com/s/13p2VCmqC4oc85h37YoBcg 在工作中Redis已经成为必备的一款高性能的缓存数据库&#xff0c;但是在实际的使用过程中&#xff0c;我们常常会遇到两个常见的问题&#xff0c;也就是文章标题所说的大 key与热 key。 一、定义 1.1…

索尼CEO宣布全力推进AI电影制作,《蜘蛛侠》制片人坚称不用AI

原标题&#xff1a;索尼互娱制片人与CEO唱反调 易采游戏网6月3日消息&#xff1a;在最近的一次行业会议上&#xff0c;索尼影业高层首席执行官托尼文西奎拉向媒体透露&#xff0c;索尼正在全力推进人工智能(AI)技术的研发与应用&#xff0c;特别是在电影制作流程中。这一策略旨…

【Hive SQL 每日一题】统计各个商品今年销售额与去年销售额的增长率及排名变化

文章目录 测试数据需求说明需求实现分步解析 测试数据 -- 创建商品表 DROP TABLE IF EXISTS products; CREATE TABLE products (product_id INT,product_name STRING );INSERT INTO products VALUES (1, Product A), (2, Product B), (3, Product C), (4, Product D), (5, Pro…