常见算法

简单认识算法

什么是算法?

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

8a4c355cda3446078ee59157d7bf60c6.png

排序算法

        冒泡排序

        选择排序

冒泡排序

 · 每次从数组中找到最大值放在数组的后面

3a64de1329a941bfa88afce545f49f53.png

import java.util.Arrays;public class Work1 {public static void main(String[] args) {//准备一个数组int[] arr = {5,2,3,1};//定义一个循环控制排几轮for (int i = 0; i < arr.length-1; i++) {//定义一个循环控制每轮比较几次for (int j = 0; j < arr.length-i-1; j++) {//判断当前位置的元素值,是否大于后一个位置处的元素值,如果大则交换if (arr[j]>arr[j+1]){int temp = arr[j+1];arr[j+1]=arr[j];arr[j]=temp;}}}System.out.println(Arrays.toString(arr));}
}

选择排序

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

558dab1d8f6d466c8560294f22ffcd30.png

 

import java.util.Arrays;public class Work1 {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[i]>arr[j]){int temp = arr[i];arr[i]=arr[j];arr[j]=temp;}}}System.out.println(Arrays.toString(arr));}
}

优化

import java.util.Arrays;public class Work1 {public static void main(String[] args) {//准备一个数组int[] arr = {5,2,3,1};//定义一个循环控制选择几轮for (int i = 0; i < arr.length-1; i++) {int minIndex = i;//定义一个循环控制每轮选择几次for (int j = i+1; j < arr.length; j++) {//判断当前位置的元素值,是否大于后面位置处的元素值,如果大则交换if (arr[minIndex]>arr[j]){minIndex=j;}}//决定是否交换if (i!=minIndex){int temp = arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}}System.out.println(Arrays.toString(arr));}
}

查找算法

基本查找 /(顺序查找)

注意:在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的!

二分查找(折半查找)

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

核心思想:每次排除一半的数据,查询数据的性能毛线提高极多!

二分查找正常的折半条件应该是开始位置 left <=结束位置 right

public class Work1 {public static void main(String[] args) {//准备一个数组int[] arr = {7,23,79,81,103,127,131,147};System.out.println(binarySearch(arr, 81));}public static int binarySearch(int[] arr,int data){//定义两个变量,一个站在左边位置,一个站在右边位置int left = 0;int right = arr.length-1;//定义一个循环控制折半while (left<=right){//3,每次折半都算出中间位置的索引int middle = (left+right)/2;//4,判断当前要找的元素值,与中间位置处的元素值的大小情况if (data<arr[middle]){//往左边找,截止位置(右边位置)=中间位置-1right=middle-1;}else if (data>arr[middle]){//往右边找,起始位置(左边位置)=中间位置+1left=middle+1;}else {//中间位置处的元素值,正好等于我们要找的元素值return middle;}}return -1;//-1特殊结果,就代表没有找到数据,数组中不存在该数据}
}

 Java提供的 binarySearch 方法可以直接应用

public class Work1 {public static void main(String[] args) {//准备一个数组int[] arr = {7,23,79,81,103,127,131,147};System.out.println(binarySearch(arr, 81));System.out.println(Arrays.binarySearch(arr, 81));}
}

 

 

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

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

相关文章

rest_framework_django 学习笔记二(视图路由)

rest_framework_django 学习笔记二&#xff08;视图路由&#xff09; rest_framwork_django学习笔记一(序列化器) 一、rest framework 中Request 与 Response 1、Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象&#xff0c;二是REST Fame…

Andrioid T 实现充电动画(2)

Andrioid T 实现充电动画&#xff08;2&#xff09; 以MTK平台为例&#xff0c;实现充电动画 效果图 资源包 修改文件清单 system/vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/prize_charge_layout.xmlsystem/vendor/mediatek/proprietary/packages/ap…

C#文件夹基本操作(判断文件夹是否存在、创建文件夹、移动文件夹、删除文件夹以及遍历文件夹中的文件)

目录 一、判断文件夹是否存在 1.Directory类的Exists()方法 2. DirectoryInfo类的Exists属性 二、创建文件夹 1. Directory类的CreateDirectory()方法 2.DirectoryInfo类的Create()方法 三、移动文件夹 1. Directory类的Move()方法 2.DirectoryInfo类的MoveT…

抖音小店本地生活服务是什么,为何聚合服务商可以带来更多商机?

抖音小店本地生活服务是指在抖音平台上提供与本地生活相关的各种服务的商家&#xff0c;比如外卖服务、快递服务、餐饮服务、美容美发等。这些服务商可以在抖音平台上创建自己的小店&#xff0c;并通过发布视频、图片等形式来展示并销售他们的服务和产品。最近&#xff0c;市场…

11.30_黑马Redis实战篇分布式锁

实战篇9 设立一个在jvm外的锁监视器&#xff0c;可以处理多线程的问题 实战篇10 获取锁的时候&#xff0c;要同时发生获取锁以及设置到期时间。 实战篇11 thinking&#xff1a;JAVA中的自动拆箱与装箱&#xff1f; 【Java基础】自动拆装箱_Elephant_King的博客-CSDN博客 TR…

虚幻学习笔记4—文本内容处理

一、前言 本文使用的虚幻引擎5.3.2&#xff0c;在虚幻中已经集成了很多可以直接处理多样化文本的蓝图&#xff0c;比如格式化动态显示、浮点数多样化等。 二、实现 2.1、格式化文本显示动态内容&#xff1a;在设置某个文本时可以使用“Format Text”蓝图设置自定义可以的显示…

传统算法:使用 Pygame 实现归并排序

使用 Pygame 模块实现了归并排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过归并排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序将数组递归地分成两半,分别进行排序,然后再将…

Spring Security 6.x 系列(7)—— 源码分析之Builder设计模式

一、Builder设计模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者&#xff0c;把他们放到一起看看他们的共同特点&#xff1a; 查看AuthenticationManagerBuilder的继承结构图&#xff1a; 查看HttpSecurity的继承结构图&#xff1a; 查看W…

正反转马达驱动芯片 D6287F,驱 动 电 流 达 1.0A,应用于VCRs及 音 频 设 备 等 电 机 的 驱 动 中

D6287F 是 一 块 正 反 转 马 达 驱 动 电 路 &#xff0c;两 种 逻 辑 输 入 方 式 可 控 制 马 达 的 正 转 、 反 转 、 停 止 、 中 断 等 。 内 置 马 达 停 止 时 省 电 电 路 及 热 保 护 电 路 。 最 大 驱 动 电 流 达 1.0A 。 广 泛 用 于 VCRs及 音 频 设 备 等 电…

FL Studio21.1.1.3750中文版是数字音频工作站 (DAW)

FL Studio水果音乐编曲软件中文版,一款强大的音乐制作软件,可以进行音乐编曲、剪辑、录音、混音。FL Studio21.1.1.3750中文版是数字音频工作站 (DAW) 之一&#xff0c;日新月异。它是一款录音机和编辑器&#xff0c;可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊…

JavaEE——简单认识CSS

文章目录 一、简单了解什么是 CSS二、CSS 选择器1.标签选择器2.类选择器3.ID 选择器4.后代选择器5.子选择器6.伪类选择器 三、字体属性1.设置字体家族2.设置字体大小3.设置字体粗细4.文字倾斜 四、文本属性1.文本对齐2.文本装饰3.文本缩进4.背景设置 五、圆角矩形六、CSS 盒子模…

Kotlin学习——kt里的作用域函数scope function,let,run,with,apply,also

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…