冒泡排序、选择排序、二分查找

简介: 冒泡排序、选择排序、二分查找

1.冒泡排序算法


判断数值的大小,大的依次往后走

• 定义第一个循环,来确认需要比较几轮

• 定义第二个循环,来判断一轮循环中需要比较多少次

public class Test1 {
    public static void main(String[] args) {
        // 目标 : 掌握|冒泡排序|算法
        int [] arr ={3,1,5,7,9};
        //先定义一个循环,需要比较几轮,n个数需要比较n-1轮
        for (int i = 0; i <=arr.length-1; i++) {
 
            // 再定义一个循环,确认每轮循环中需要比较几次
            /*
                i      1 , 3 , 5 , 7 , 9
               第一轮  i=0  得出最大值需要比较四次
               第二轮  i=1  得出需要比较三次
               第三轮  i=2  得出需要比较二次
               第四轮  i=3  得出需要比较一次
             */
 
            for (int j = 0; j < arr.length-i-1 ; j++) {
                //判断数值的大小,大的数往后走
                if (arr[j]>arr[j+1]){
                    //对数组中的数据值进行反转,需要定义一个临时变量
                    int temp=0;
                    temp = arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                }
            }
 
        }
 
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
 
    }
}


2.选择排序算法


选择排序是定位的排序,让当前位置的数与后面位置处的值进行比较,选出较小的值来到当前位置

• 定义第一个循环,来确认需要比较几轮,n-1轮

• 定义第二个循环,来判断一轮循环中需要比较多少次

public class Test2 {
    public static void main(String[] args) {
        // 目标:掌握选择排序算法
        // 选择排序是定位的排序,让当前位置的数与后面位置的处的值进行比较,选出较小值来到当前位置
        //1.准备一个数组来排序
        double [] arr= {9,8,7,3,2,1};
            // 定义一个循环来进行 n-1(n个数)轮排序
        for (int i = 0; i < arr.length-1 ; i++) {
            /*
            i               j               j=i+1 ,j是后面值的索引,所以要一直比i大1
            0               1,2,3,4,5
            1               2,3,4,5
            2               3,4,5
            3               4,5
            4               5
             */
 
            // 内部定义一个循环,来决定一轮排序中需要进行几次比较
            for (int j = i+1; j < arr.length ; j++) {
                // 判断当前位置的值和后面位置处值的大小
                // 后面位置的值用arr[j]来取,所以j应该从1开始,
                // 第一次比较时,当前位置就是第一个值,arr[0],第二次就是arr[1],即当前位置的值应该为arr[i]
                if (arr[i]>arr[j]){
                    // 将较小值换到当前位置处
                   double temp =0;
                   temp=arr[j];
                   arr[j]=arr[i];
                   arr[i]=temp;
                }
 
            }
 
        }
        //调用Arrays类的toString方法输出数组内容
        System.out.println(Arrays.toString(arr));
    }
}


3.二分查找


条件:

  • 用于查找的内容逻辑上来说是需要有序的
  • 查找的数量只能是一个,而不是多个
public class Test3 {
    public static void main(String[] args) {
        // 目标:掌握二分查找
        // 利用二分查找找数据时,数组需要有顺序
        // 1.准备出一个数组
        int [] arr={1,11,22,33,35,55,77,88,99};
 
        //2.定义一个方法来找数据
            binarySearch(arr,77);
 
        // 3.输出这个数
        int binarySearchData=binarySearch(arr,80);
        System.out.println(binarySearchData);
    }
 
    public  static int binarySearch (int []arr,int data){
        //定义一个循环来用二分法找到所要数据
        //这里不知道要循环多少次,所以while
        // 二分法需要确立一个左边界限和右边界限
        int left=0;//这里left和right是数组的索引
        int right=arr.length-1;
 
        // 二分查找的结束条件就是left>right,跳出循环
        while(left<=right){
          int  middle=(left+right)/2;
            if (arr[middle]>data){//中间位置的值大于该数据,往左找
                //注意:是该位置出处的值,middle是索引
                right=middle-1;
            }
            else if(arr[middle]<data){
                  left=middle+1;
            }
            else {
                return middle;
            }
 
 
        }
           return  -1;//找不到数据时
    }
}
目录
相关文章
|
6月前
|
小程序 Java 关系型数据库
weixin049校园外卖平台设计与实现+ssm(文档+源码)_kaic
本文介绍了一款校园外卖平台的设计与实现过程。该平台采用Java的SSM框架进行后台管理开发,使用MySQL作为本地数据库,并通过微信小程序为用户提供便捷的操作界面。系统包括管理员、用户和商家三个角色,功能涵盖个人中心、用户及商家管理、菜品分类与信息管理、订单处理等。管理员可在浏览器上登录管理后台数据,用户与商家则通过微信小程序注册登录,分别实现订餐与菜品管理功能。此平台具备界面清晰、操作简单、功能齐全的特点,有助于提升校园外卖管理的效率与规范性。
|
10月前
|
存储 算法 C++
【C++】哈希桶
哈希桶是哈希表中的基本存储单元,用于存放通过哈希函数映射后的数据元素。当不同元素映射至同一桶时,产生哈希冲突,常用拉链法或开放寻址法解决。哈希桶支持高效的数据插入、删除与查找操作,时间复杂度通常为O(1),但在最坏情况下可退化为O(n)。
197 6
|
11月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
562 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
5月前
|
人工智能 搜索推荐 安全
国央企与大型民营企业CRM选型:复杂需求下的智能化解决方案
在企业数字化转型中,CRM系统已成为推动增长与效率的核心引擎。特别是国央企及大型民营企业,面对复杂的业务需求和庞大的组织架构,选择适合的CRM至关重要。文章分析了选型中的五大挑战:跨部门协同、个性化需求、异构系统整合、安全合规及数据挖掘能力,并以纷享销客为例,展示其通过AI+CRM实现内外高效协同、智能决策支持及灵活定制的优势。最终强调,CRM应被视为长期数字化转型的核心基础设施,需综合评估系统扩展性、技术迭代能力及服务响应效率,确保技术投入与企业发展战略高度协同。
|
7月前
|
Linux
RPM软件包管理工具使用指南
RPM(Red Hat Package Manager)是Red Hat及其他基于RPM的Linux发行版中用于管理软件包的基本包管理工具。它是一个二进制包管理系统,允许用户在Linux系统中方便地安装、升级、查询和删除软件包。RPM使用.rpm文件扩展名的软件包文件,这些软件包文件包含了软件的可执行文件、配置文件、文档等,以及安装和卸载时需要执行的脚本。通过RPM,用户可以轻松地管理和维护系统中的软件,确保系统的稳定运行和软件的及时更新。
479 4
|
10月前
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
195 1
|
11月前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
681 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
计算机视觉 开发者 Python
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
452 0
|
分布式计算 Hadoop Java
面向开发者的Hadoop编程指南
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由Hadoop分布式文件系统(HDFS)和MapReduce编程模型组成。本指南旨在帮助初学者和中级开发者快速掌握Hadoop的基本概念和编程技巧,并通过一些简单的示例来加深理解。
460 0
|
算法 项目管理 数据中心
【数据结构】拓扑网络(AOE算法举例+源码)
【数据结构】拓扑网络(AOE算法举例+源码)
【数据结构】拓扑网络(AOE算法举例+源码)