常见——算法

一.排序算法

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  "数组中没有该数字";
    }

}
相关推荐
eternal__day5 分钟前
Spring Cloud 多机部署与负载均衡实战详解
java·spring boot·后端·spring cloud·负载均衡
颜淡慕潇9 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
程序员秘密基地15 分钟前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
何中应17 分钟前
【设计模式-5】设计模式的总结
java·后端·设计模式
草莓熊Lotso17 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
KyollBM24 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
吾日三省吾码34 分钟前
Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
java·spring·缓存
CV点灯大师38 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
风象南1 小时前
SpringBoot的5种日志输出规范策略
java·spring boot·后端
GGBondlctrl1 小时前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想