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地址并不能直接影响网络速度,但它可以成为改善网络连接的一种策略之一。虎观代理小二二将探讨如何通过…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...