常见——算法

一.排序算法

1.冒泡排序

java 复制代码
public class Test {
    public static void main(String[] args) {
        int []arr={12,34,1,56,44,4,5,55};
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                    int temp=arr[j+1];
                    if(arr[j]>arr[j+1])
                    {
                        arr[j+1]=arr[j];
                        arr[j]=temp;
                    }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

结果:[1, 4, 5, 12, 34, 44, 55, 56]

2.选择排序

java 复制代码
//选择排序
public class Selectsorting_Test {
    public static void main(String[] args) {
            int [] arr={1,34,22,123,8,456};
            //控制几轮
        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 复制代码
public class Selectsorting_Test {
    public static void main(String[] args) {
            int [] arr={1,34,22,123,8,456};
            //控制几轮
        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));
    }
}

二.查找算法

二分查找

java 复制代码
package com.itheima;

import java.util.Arrays;
import java.util.Scanner;

//二分查找
public class Test3_Binarysearch {
    public static void main(String[] args) {
        int [] arr ={7,23,79,81,103,127,131,147};
        Scanner sc=new Scanner(System.in);
        System.out.println(Arrays.toString(arr));
        System.out.println("请输入您要查找的数字");
        int number=sc.nextInt();
        System.out.println(binarysearch(arr, number));
        //Java提供的方法
        System.out.println(Arrays.binarySearch(arr, 81));
    }

    public  static String binarysearch(int []arr, int data)
    {//1.定义两个变量,一个站左边,一个站右边
        int left=0;
        int right=arr.length-1;
        //2.定义一个循环控制折半
        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 String.valueOf(middle);
            }
        }
        return  "数组中没有该数字";
    }

}
相关推荐
夏乌_Wx11 小时前
练题100天——DAY30:下一个更大的元素+键盘行
数据结构·算法
长安er11 小时前
LeetCode 300/152/416/32 动态规划进阶题型总结(最长递增子序列→最长有效括号)
数据结构·算法·leetcode·动态规划·剪枝
cui_win11 小时前
Redis 连接池被占满(泄漏)问题排查
java·redis·连接泄露
天赐学c语言11 小时前
12.18 - 有效的括号 && C语言中static的作用
数据结构·c++·算法·leecode
Doris_LMS11 小时前
JDK11的安装教程
java·jdk
JIngJaneIL11 小时前
基于java+ vue建筑材料管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
一 乐11 小时前
办公系统|基于springboot + vueOA办公管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
季远迩11 小时前
LeetCode 热题 100 Python3易懂题解(更新中)
算法·leetcode·哈希算法
CoovallyAIHub11 小时前
从“模仿”到“进化”!华科&小米开源MindDrive:在线强化学习重塑「语言-动作」闭环驾驶
深度学习·算法·计算机视觉
多则惑少则明11 小时前
AI大模型实用(五)Java快速实现智能体整理(LangChain4j构建Java AI智能体)
java·ai大模型