当前位置: 首页 > news >正文

Java-三个算法冒泡-选择排序,二分查找

Java算法:

冒泡排序;

解析:将前后两个数对比,将大的数(或小的)调换至后面,每轮将对比过程中的最大(或最小)数,调到最后面。每轮对比数减一;初始对比数为数组长度-1.

import java.util.Arrays;public class Test816 {public static void main(String[] args) {int[] arr = {5,2,3,1};//        System.out.println(arr);for(int i = 0;i < arr.length-1 ; i ++){   //需要排序的轮数(数组长度-1)for (int j = 0; j < arr.length-i-1 ; j++){ //每轮排序需要多少次if (arr[j] > arr[j+1]){int b = arr[j];arr[j] = arr[j+1];arr[j+1] = b;}}}System.out.println(Arrays.toString(arr));}}

选择排序:

解析:选择第一个数依次与其他元素对比,数值小的或(大的)交换位置至前方(小的为顺序,大的为逆序),每对比一轮选择数向后移动一位。

import java.util.Arrays;public class Test816 {public static void main(String[] args) {int[] arr = {5,2,3,1};for (int i = 0; i < arr.length - 1; i++) {for(int j = i+1;j < arr.length;j++){if(arr[j] < arr[i]){//i在前j在后,顺序就j<i.//两数调换位置int a = arr[i];arr[i] = arr[j];arr[j] = a;}}}System.out.println(Arrays.toString(arr));    }}

选择排序的优化:新建一个数min记录较小数的下标(初始值为轮数数i的下标);然后通过对比,将min改为比它小的数的下标;一轮循环后判断min是否等于初始值i,不相等则调换位置。——该优化减少了交换次数,优化性能i

mport java.util.Arrays;public class Test816 {public static void main(String[] args) {int[] arr = {5,2,3,1};for (int i = 0; i < arr.length - 1; i++) {int min = i;for(int j = i+1;j < arr.length;j++) {if (arr[j] < arr[i]) {//i在前j在后,顺序就j<i.//min记录新下标min = j;}//一轮完成后获得该轮最小值的的下标if (i != min) {判断是否与初始下标相同,不同则交换数据。int a = arr[i];arr[i] = arr[min];arr[min] = a;}}}System.out.println(Arrays.toString(arr));   }}

查找算法:

二分查找:通过对比中间值与目标值的的小来减小对比范围;当中间值小于目标值时,取中间值+1到末尾的中间值与目标对比,重复步骤,直至首尾相同。返回该值。

public class Test19 {public static void main(String[] args) {int[] arr = {7,23,79,81,103,127,131,147};int left,mid,right;System.out.println(bancha(arr,103));}///传入数组A,以及要搜索的数据public static int bancha(int[] a,int date){int left = 0,right = a.length - 1;while(left <= right) {int mid = (left + right) / 2;if (a[mid] > date) {right = mid - 1;} else if (a[mid] < date) {left = mid + 1;} else {return mid;//                break;}}return -1;}}

http://www.lryc.cn/news/141316.html

相关文章:

  • docker版jxTMS使用指南:使用jxTMS提供数据
  • 阿里 MySQL 规范
  • C++ Primer阅读笔记--动态内存和智能指针
  • git分支管理策略
  • IntelliJ IDEA maven配置,设置pom.xml的配置文件
  • C#__使用Thread启动线程和传输数据
  • appium2.0+ 单点触控和多点触控新的解决方案
  • 记录一次Modbus通信的置位错误
  • 数据结构--递归与分治
  • spring cloud gateway中出现503
  • 战略在集体学习过程中涌现
  • html动态爱心代码【四】(附源码)
  • 如何利用SLF4J扩展模块实现高效的日志记录
  • 通用语言模型蒸馏-GLMD
  • kafka--技术文档-基本概念-《快速了解kafka》
  • ChatGPT:ChatGPT 的发展史,ChatGPT 优缺点以及ChatGPT 在未来生活中的发展趋势和应用
  • 【八股】2023秋招八股复习笔记4(MySQL Redis等)
  • 【Unity】 Mesh 和 Mesh.subMeshCount
  • Java开发中Word转PDF
  • 【前端】vscode前端插件笔记
  • windows MFC消息demo
  • 尚硅谷大数据项目《在线教育之离线数仓》笔记003
  • 银河麒麟arm版服务器安装docker
  • 三个视角解读ChatGPT在教学创新中的应用
  • PHP求职招聘系统Dreamweaver开发mysql数据库web结构php编程计算机网页
  • Mysql 基本概念
  • python开发--文件敏感信息识别
  • 【力扣】746. 使用最小花费爬楼梯 <动态规划>
  • sftp命令 添加端口(亲测)
  • Redis.conf详解