常见——算法

一.排序算法

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

}
相关推荐
励志要当大牛的小白菜30 分钟前
ART配对软件使用
开发语言·c++·qt·算法
qq_5139704433 分钟前
力扣 hot100 Day56
算法·leetcode
武子康1 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
PAK向日葵1 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
爱喝矿泉水的猛男4 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
YuTaoShao4 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw4 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨4 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
YouQian7724 小时前
Traffic Lights set的使用
算法
双力臂4045 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试