常见——算法

一.排序算法

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

}
相关推荐
我不是混子26 分钟前
什么是Java 的 Lambda 表达式?
java·后端
小蝙蝠侠38 分钟前
JMeter 执行流程
java·jmeter
程序员小假1 小时前
我们来说一说 ThreadLocal 内存泄漏
java·后端
补三补四1 小时前
图卷积网络 (GCN)
网络·人工智能·深度学习·神经网络·算法·机器学习
xq95271 小时前
获取Facebook 散列利器 来了 十六进制到 Base64 转换器
java
未知陨落1 小时前
LeetCode:82.杨辉三角
算法·leetcode
CoovallyAIHub2 小时前
全球首个精细梯田地块数据集GTPBD发布:为梯田遥感研究填补空白(附数据地址)
深度学习·算法·计算机视觉
我不是混子2 小时前
聊聊Spring事件机制
java·后端
DKPT2 小时前
JVM栈溢出时如何dump栈信息?
java·jvm·笔记·学习·spring
DKPT2 小时前
JVM堆大小如何设置?
java·开发语言·jvm·笔记·学习