Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角
声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)
Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角
一、选择排序
1.原理:
找到最小值的索引,然后和第1个数据进行交换。再找除了第一个数据以外的最小值的索引。然后和第二个数据交换
2.代码示例:
public class Demo1 {public static void main(String[] args) {//选择排序int[] arr = {3,4,1,5,2};/*** i=0 0<4 true minIndex=0 * 进入内层的for循环* j=0 0<5 true arr[0] >arr[0]false j++* j=1 1<5 true arr[0] >arr[1] false j++* j=2 2<5 true arr[0]>arr[2]true minIndex=2 j++* j=3 3<5 true arr[2]>arr[3]fasle j++* j=4 4<5 true arr[2]>arr[4] fasle j++* j=5 5<5fasle循环结束* 执行交换代码* temp = arr[2]=1* arr[2] = arr[0] {3,4,3,5,2}* arr[0] = 1 {1,4,3,5,2} i++* i=1 1<4 true minIndex =1* ......* */for (int i = 0; i < arr.length - 1; i++) {//控制的是轮数int minIndex = i;for (int j = i; j < arr.length; j++) {//遍历咱们的数据找到最小值的索引的if (arr[minIndex] > arr[j]) {minIndex = j;}}//交换位置int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}System.out.println(Arrays.toString(arr));}}
代码写的非常详细,大家把代码看懂就好
二、冒泡排序
1.原理:
从小到大排序,比较两个相邻的数据,如果左边比右边元素大就交换位置。如果左边比右边小,就不变
2.代码示例
public class Demo2 {public static void main(String[] args) {//冒泡 排序和索引没有关系int[] arr = {1,5,2,3};for (int i = 0; i < arr.length - 1; i++) {//最内层的循环两两比较交换位置//4-1-i=>i=0 第1轮 3次//4-1-i=>i=1 第2轮 2次//4-1-i=>i=2 第3轮 1次for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {//交换位置int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println(Arrays.toString(arr));}
}
3.二者比较
这里要提的一点,区分选择排序和冒泡排序,选择排序是每次遍历所有数据,找出最大的那个并和第一个交换,所以代码里是内层for循环结束后在外层for循环里交换,而冒泡排序则是每次把相邻的两个数进行比较,如果前面的大则交换位置,这样比较下去最终最大的那个数就会冒出来,这也就是为什么,冒泡是在内存for循环里交换,并且变量j的初始值为0,而不是i。
三、快速排序
1.原理
快速排序是一种常用的排序算法,它的基本思想是通过分治的方法将一个大问题拆分成若干个小问题来解决,选择一个基准元素(通常选择数组的第一个元素)将数组分成两部分,一部分小于基准元素,一部分大于基准元素,对这两部分分别进行快速排序递归地重复以上步骤,直到每个子数组只有一个元素或者为空。
2.代码示例
举个例子,假设我们要对数组[5, 3, 8, 2, 1, 9]进行快速排序:选择基准元素为5,将数组分成[3, 2, 1]和[8, 9]两部分,对两部分分别进行快速排序,得到[1, 2, 3]和[8, 9],最后得到排序后的数组为[1, 2, 3, 5, 8, 9]
public class QuickSort {public static void main(String[] args) {int[] arr = {5, 3, 8, 2, 1, 9};quickSort(arr, 0, arr.length - 1);System.out.println("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high); // 获取基准元素的位置quickSort(arr, low, pivot - 1); // 对基准元素左边的子数组进行快速排序quickSort(arr, pivot + 1, high); // 对基准元素右边的子数组进行快速排序}}public static int partition(int[] arr, int low, int high) {int pivot = arr[low]; // 选择第一个元素作为基准元素while (low < high) {while (low < high && arr[high] >= pivot) {high--;}arr[low] = arr[high]; // 将比基准元素小的元素移到低位while (low < high && arr[low] <= pivot) {low++;}arr[high] = arr[low]; // 将比基准元素大的元素移到高位}arr[low] = pivot; // 将基准元素放到最终位置return low; // 返回基准元素的位置}
}
另外拓展一小点:java面向对象里封装了sort方法,该方法底层就是快速排序
int[] arr=new int[]{123,523,1,4,244,14231,122};
Arrays.sort(arr);//sort的底层是快排,效率最高
System.out.println(Arrays.toString(arr));
四、杨辉三角
1.什么是杨辉三角
杨辉三角是一个由数字排列成的三角形,其中每个数字是它上方两个数字的和。它的第n行有n个数字,第一个和最后一个数字都是1,其他数字是上一行相邻两个数字的和。
举个例子,下面是一个4行的杨辉三角:
1
1 1
1 2 1
1 3 3 1
2.代码示例
如何生成指定行数的杨辉三角?通过使用二维数组来存储杨辉三角的每个数字,然后利用动态规划的思想,根据每个数字等于上一行两个相邻数字的和的规律来生成杨辉三角。
public class PascalTriangle {public static void main(String[] args) {int numRows = 5;generatePascalTriangle(numRows);}public static void generatePascalTriangle(int numRows) {int[][] triangle = new int[numRows][];for (int i = 0; i < numRows; i++) {triangle[i] = new int[i + 1];triangle[i][0] = 1; // 每行的第一个数字为1triangle[i][i] = 1; // 每行的最后一个数字为1for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; // 每个数字等于上一行两个相邻数字的和}}// 打印杨辉三角for (int i = 0; i < numRows; i++) {for (int j = 0; j <= i; j++) {System.out.print(triangle[i][j] + " ");}System.out.println();}}
}
五、二分法查找算法
1.原理:
二分法查找算法是一种高效的查找算法,它适用于已排序的数组。如何使用二分法查找算法在有序数组中查找指定的目标值?通过不断缩小查找范围,将数组分成两部分,并与目标值进行比较,从而确定目标值在数组中的位置。如果找到目标值,返回它在数组中的索引;如果找不到目标值,返回-1。
2.具体步骤:
具体步骤如下:
1)选择数组的中间元素
2)如果中间元素等于目标值,则查找成功
3)如果中间元素大于目标值,则在数组的前半部分继续查找
4)如果中间元素小于目标值,则在数组的后半部分继续查找
5)重复以上步骤,直到找到目标值或者数组为空
3.代码示例
举个例子,假设我们要在有序数组[1, 2, 3, 5, 8, 9]中查找数字5:选择中间元素为3,由于3小于5,所以在数组的后半部分[5, 8, 9]中继续查找,选择中间元素为8,由于8大于5,所以在数组的前半部分[5]中继续查找,找到目标值5,查找成功
public class BinarySearch {public static void main(String[] args) {int[] arr = {1, 2, 3, 5, 8, 9};int target = 5;int index = binarySearch(arr, target);if (index != -1) {System.out.println("目标值 " + target + " 在数组中的索引为 " + index);} else {System.out.println("目标值 " + target + " 不在数组中");}}public static int binarySearch(int[] arr, int target) {int low = 0;int high = arr.length - 1;while (low <= high) {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; // 目标值不在数组中}
}
今天没有习题,理解为主,其中选择排序和冒泡排序是现在必须要理解的,至于后面的快速排序、杨辉三角、二分查找等,则先理解,后面还会再次讲解。
相关文章:
Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角
声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) Java学习day05:排序࿰…...
Mybatis的mapper.xml批量插入、修改sql
今天要有个功能,要进行一批数据的插入和修改,为了不频繁调用数据库,所以想到了批量插入和修改,因为从毕业后,就没写过批量插入和批量修改,所以在这里记录一下,避免后续再遇到忘记怎么写了 批量…...
Centos7部署单机版MongoDB
目录 Centos7部署单机版MongoDBMongoDB介绍数据模型索引分布式高可用性查询语言驱动和社区用途缺点 下载并解压安装包创建相关文件夹和文件编辑mongod.conf文件启动mongodb创建管理员用户终止MongoDB服务配置自启动服务关闭SELinux编辑自启动服务文件mongodb服务命令 Centos7部…...
Docker实战-第一章欢迎来到Docker世界
Docker基础 什么是Docker docker是包括一个命令行程序、后台守护进程和一组远程服务,它简化了安装、运行、发布和删除软件的工作。docker实现的基础是UNIX的容器技术。所以在docker出世之前已经有容器的概念,而且像谷歌一类公司也在探索自己的容器&…...
初识C语言——详细入门一(系统性学习day4)
目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍: 特点: 基本构成: 二、认识C语言程序 标准格式: 简单C程序: 三、基本构成分类详细介绍 (1)关键字 (2…...
python 学习笔记(6)—— Flask 、MySql
目录 Flask 1、起步 2、渲染项目的首页 3、处理无参数的 GET 请求 4、处理有 query 参数的 GET 请求 6、处理 params 参数的 get 请求 6、处理 application/json 类型请求体的 POST 请求 7、根据参数渲染模板页面 8、上传文件 数据库操作(mysql࿰…...
Deepin下vsftp服务安装配置虚拟用户
1. 系统环境 Deepin20.9 2. 在线安装 # apt install -y vsftp //安装ftp服务软件 # apt install -y db-util //安装虚拟用户密码库处理软件 3. 离线安装 3.1 下载依赖包 # apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --n…...
OpenpyxlWriter‘ object has no attribute ‘save‘
问题 将实验结果保存为EXCEL,报错“OpenpyxlWriter‘ object has no attribute ‘save‘” data_df pd.DataFrame(Experiment_result) #关键1,将ndarray格式转换为DataFrame writer pd.ExcelWriter(./results/ args.model_num _args.data_name …...
ES6(三)
文章目录 Promise概念作用回调地狱Promise使用对象的状态Promise.allPromise.race Generator 函数概念基本语法异步流程 Class语法类的写法getter与setter静态属性和静态方法继承模块化 Promise 概念 Promise 是异步编程的一种解决方案,比传统的解决方案回调函数,…...
Android 数据库封装(SQLite)
Android 数据库操作(SQLite) Android 数据库操作(SQLite)动态预览使用初始化生成表实体类插入数据批量插入删除数据删除全部修改数据查找(列表)查找(单条)条件查找(列表&…...
Git从入门到起飞(详细)
Git从入门到起飞 Git从入门到起飞什么是Git?使用git前提(注册git)下载Git在Windows上安装Git在macOS上安装Git在Linux上安装Git 配置Git配置全局用户信息配置文本编辑器 创建第一个Git仓库初始化仓库拉取代码添加文件到仓库提交更改推送 Git基本操作查看提交历史比较…...
R读写parquet文件
什么是parquet文件 Apache Parquet是一个开源的,列存储的数据文件格式。 https://parquet.apache.org/ 在R里面,我们可以通过arrow包来读写它。 我们先安装一下arrow包,并加载它。 install.packages("arrow") library(arrow)读写…...
Java21 LTS版本
一、前言 除了众所周知的 JEP 之外,Java 21 还有更多内容。首先请确认 java 版本: $ java -version openjdk version "21" 2023-09-19 OpenJDK Runtime Environment (build 2135-2513) OpenJDK 64-Bit Server VM (build 2135-2513, mixed mo…...
【性能优化】虚拟懒加载(下拉滚动加载长列表)element-puls+el-table
目录 前言一、卡顿的原因?二、解决1、滚动懒加载2.官方 总结 前言 提示:这里可以添加本文要记录的大概内容: 在element-plus中,如果数据超过1k,就会感觉到明显的卡顿,应该是渲染的卡顿吧。反正我在请求回…...
一对多映射处理
8.3.1 、collection /** * 根据部门id查新部门以及部门中的员工信息 * param did * return */ Dept getDeptEmpByDid(Param("did") int did);<resultMap id"deptEmpMap" type"Dept"> <id property"did" column"did&quo…...
关于IDEA没有显示日志输出?IDEA控制台没有显示Tomcat Localhost Log和Catalina Log 怎么办?
问题描述: 原因是;CATALINA_BASE里面没有相关的文件配置。而之前学习IDEA的时候,把这个文件的位置改变了。导致,最后输出IDEA的时候,不会把日志也打印出来。 检查IDEA配置; D:\work_soft\tomcat_user\Tomcat10.0\bin 在此目录下&…...
蛇形填数 rust解法
蛇形填数。 在nn方阵里填入1,2,…,nn,要求填成蛇形。例如,n=4时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 解法如下: use std::io;fn main() {let mut buf String::new();…...
一文探索SD-WAN技术进阶后与MPLS的区别
在网络通信领域,随着云计算和大数据等新兴技术的快速发展,企业对于网络的可靠性、安全性以及带宽的需求越来越高。 SD-WAN(软件定义广域网)和MPLS(多协议标签交换)是两种不同的网络连接技术,它们…...
RocketMq(四)消息分类
一、普通消息 1、同步发送消息:指的是Producer发出⼀条消息后,会在收到MQ返回的ACK之后才发下⼀条消息。该方式的消息可靠性最高,但消息发送效率低。 二、顺序消息 三、延时消息...
ip地址怎么改网速快
在当今高度依赖互联网的时代,快速稳定的网络连接对于人们的生活和工作至关重要。然而,有时我们可能会遇到网络速度缓慢的问题。虽然更改IP地址并不能直接影响网络速度,但它可以成为改善网络连接的一种策略之一。虎观代理小二二将探讨如何通过…...
从零学会基础算法前缀和差分:数组区间求和离散化基础
首先祝大家劳动节快乐!开学两个月来学的东西不多,主要掌握了两块内容:前缀和/差分/离散化 和 数学基础。本文是第一篇,重点整理前缀和相关内容。 编程语言:C 排版助手:AI一、数组的三个简化技巧 1. 前缀和 …...
Cursor编辑器Markdown规则集:AI生成文档自动化格式规范指南
1. 项目概述:一个为 Cursor 编辑器定制的 Markdown 规则集 如果你和我一样,日常重度依赖 Cursor 这款 AI 驱动的代码编辑器,并且经常需要编写大量的技术文档、项目 README 或者技术博客,那你一定遇到过这样的痛点:AI …...
硅应变计与Σ-Δ ADC协同设计及温度补偿技术
1. 硅应变计与Σ-Δ ADC的协同优势解析硅基应变计在现代传感器领域占据重要地位,其核心原理基于压阻效应——当硅材料发生机械形变时,晶格结构变化导致载流子迁移率改变,从而引起电阻值变化。与传统金属箔应变计相比,硅应变计的灵…...
LSP4J-MCP:连接语言服务器与AI的协议桥接器实践
1. 项目概述:当LSP遇上MCP,一场开发工具链的“协议融合”如果你是一名长期与IDE打交道的开发者,无论是写Java、TypeScript还是其他语言,大概率都听说过或者用过语言服务器协议。它让VS Code、IntelliJ IDEA这些编辑器能理解代码、…...
文献阅读 260511-Wildfire damages and the cost-effective role of forest fuel treatments
Wildfire damages and the cost-effective role of forest fuel treatments 来自 <https://www.science.org/doi/10.1126/science.aea6463> ## Abstract: Gave the core question: Wildfires are among the most pressing environmental challenges of the 21st century,…...
美政府AI主管:Anthropic 将在 18 个月内成为人类历史最有价值公司
Anthropic 已经成为人工智能革命中最成功的案例之一,但这或许还不是全部。风险投资家兼美国政府人工智能和加密货币沙皇大卫萨克斯在 All-In播客节目中提出了一个惊人的说法:Anthropic 不仅有望成为科技界最强大的公司,而且有望成为人类历史上…...
Google Maps路线优化突遭瓶颈?Gemini大模型如何将平均行程时间压缩23.6%(2024Q2实测数据)
更多请点击: https://intelliparadigm.com 第一章:Google Maps路线优化突遭瓶颈?Gemini大模型如何将平均行程时间压缩23.6%(2024Q2实测数据) 当Google Maps在高并发城市网格中遭遇动态交通建模失准、实时事件响应延迟…...
逆向实战:从异或表到明文存储,我是如何让Eternium的游戏数据‘裸奔’的
逆向工程实战:解密游戏数据存储的核心逻辑 在数字娱乐时代,游戏安全机制与逆向分析技术之间的博弈从未停止。对于技术爱好者而言,理解游戏如何保护其核心数据不仅是一次智力挑战,更是深入了解计算机系统底层运作的绝佳机会。本文将…...
暗黑破坏神2存档编辑器:游戏数据解析与自定义编辑的技术实现
暗黑破坏神2存档编辑器:游戏数据解析与自定义编辑的技术实现 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在游戏开发与修改社区中,暗黑破坏神2(Diablo II)作为经典ARPG游戏&…...
鸿蒙数据持久化三板斧:Preferences、RDB、分布式数据一文搞定,告别数据丢失
📖 鸿蒙NEXT开发实战系列 | 第21篇 | 数据篇 🎯 适合人群:有鸿蒙基础的开发者 ⏰ 阅读时间:约15分钟 | 💻 开发环境:DevEco Studio 5.0 ⬅️ 上一篇:20-网络篇-网络请求与数据加载 ➡️ 下一篇&…...
