常见算法

简单认识算法

什么是算法?

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

排序算法

冒泡排序

选择排序

冒泡排序

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

java 复制代码
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));
    }
}

选择排序

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

java 复制代码
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));
    }
}

优化

java 复制代码
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

java 复制代码
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]){
                //往左边找,截止位置(右边位置)=中间位置-1
                right=middle-1;
            }else if (data>arr[middle]){
                //往右边找,起始位置(左边位置)=中间位置+1
                left=middle+1;
            }else {
                //中间位置处的元素值,正好等于我们要找的元素值
                return middle;
            }
        }
        return -1;//-1特殊结果,就代表没有找到数据,数组中不存在该数据
    }
}

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

java 复制代码
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));
    }
}
相关推荐
2401_8582861136 分钟前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
张同学的IT技术日记1 小时前
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++
算法
极客BIM工作室1 小时前
强化学习算法分类与介绍(含权重更新公式)
算法·分类·数据挖掘
KarrySmile1 小时前
Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
数据结构·算法·链表·双指针·快慢指针·hot100·灵艾山茶府
luckycoding1 小时前
1424. 对角线遍历 II
算法·leetcode·职场和发展
CoovallyAIHub1 小时前
基于ICR损失与SVMLP数据集:小目标检测新突破,车牌检测准确率显著提升
深度学习·算法·计算机视觉
鲸鱼24011 小时前
贝叶斯笔记
人工智能·算法·机器学习
刃神太酷啦2 小时前
Linux 常用指令全解析:从基础操作到系统管理(1w字精简版)----《Hello Linux!》(2)
linux·运维·服务器·c语言·c++·算法·leetcode
黄贵根2 小时前
使用JDK11标准 实现 图数据结构的增删查改遍历 可视化程序
java·开发语言·数据结构
努力找工作的OMArmy2 小时前
力扣498 对角线遍历
算法·leetcode·职场和发展