冒泡与二分法的爱恨纠葛

冒泡排序与二分法查找


前言

冒泡排序,编程中,基础的基础,重中之重!什么是冒泡排序,怎么用,什么时候用?

二分法?听过,编程里咋写?咋用?


一、冒泡排序?二分法查找?

简单介绍

冒泡排序?使用两个for循环嵌套给数组进行排序

二分法查找?在有序的数组中找到你所要查找的元素,返回下标

二、冒泡排序的原理及使用

1.原理

众所周知,水泡是有浮力的,水泡越大浮力越大,离水面就越近,所以我们把数组看成一个水瓶,里面的元素是一个个水泡,现在的水泡是大小不一的排列着,采用冒泡排序后,可以将水泡排列成大小规律的顺序。

2.手写冒泡排序思路及实现

我们将数组中的每一个元素拿出来与其他元素进行比较,找到它在这个数组中的位置

java 复制代码
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        //冒泡排序
        for(int i = 0;i < arr.length - 1;i++){
            for(int j = 0;j < arr.length - 1 - i;j++){
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

代码讲解

因为思路是要每一个元素都拿出来比较,所以将外层循环的操作看成抓取数组元素的操作,所以外层的循环条件就是从0开始,一直到数组的长度-1,相当于遍历数组,但是为什么i 不是小于等于,还要加-1,一会讲内层循环的操作看成将该元素与该元素后面的元素作比较,所以从 0 开始,重复数组元素个数 - i 遍结束。这样既提高效率,又能一个不落的全部比较一边,接下来就是一个逻辑判断,如果后面位置的元素比当前位置的元素大,那就调换位置(排列的顺序自己去调整,可以最小的在前面,也可以最大的在前面),这里注意到我用了 j 和 j + 1来表示两个位置的元素,所以我们在最开始设置循环条件的时候要在数组个数的基础上再-1,要不然会报错,超出数组长度。

效果演示/运行结果

这样现在我们的数组中就是按照顺序大小排列好的有序数组了。


三、二分法查找的原理及使用

1.原理

二分法查找,顾名思义,和数学中的二分法很像,没错,使用起来也很像,在数学中,需要使用在单调性统一的函数中,而在我们计算机里,需要使用在有序的数组里,其实道理是一样的,都是使用在数值逐渐增大或减小的目标中,这时候我们的数组如果是无序的,我们就需要用到上面介绍到的冒泡排序将数组变得有顺序。

2.二分法查找思路及实现

思路,传入一个目标值,在数组中获取中间值下标,将目标值与中间值作比较,如果相等,返回目标元素下标,如果不相等,重新赋一个中间值,重复以上操作,知道找到该元素为止。

java 复制代码
//二分法查找
        int dest = 64;                  //目标元素
        int head = 0;                   //数组的首位元素下标,用于计算中间值下标
        int end = arr.length - 1;       //数组的末尾元素下标,用于计算中间值下标
        boolean isFlag = true;          //判断找没找到的标志

        //开始查找操作
        while (head <= end){
            int mid = (head + end) / 2;
            if (dest == arr[mid]){
                isFlag = false;
                System.out.println("找到" + dest +"了!该元素在数组中的位置是:" + mid);
                break;
            }else if (arr[mid] > dest){
                end = mid - 1;
            }else{
                head = mid + 1;
            }
        }

        if (isFlag){
            System.out.println("没找到!!!");
        }

这里就是二分法查找的具体实现代码,如果查找的需求多,可以对其修改,将其封装成方法,根据具体需求具体改动,参数列表中放你需要查找的元素。

运行结果

总结

以上就是冒泡排序与二分法查找的详解,大家在开发实战中要灵活运用,如果这篇文章解决了你的问题,点个关注吧,持续更新中...

相关推荐
副露のmagic几秒前
更弱智的算法学习 day18
学习·算法
byzh_rc2 分钟前
[数字信号处理-入门] 采样定理
算法·matlab·信号处理
想进个大厂2 分钟前
代码随想录day6哈希表
算法·leetcode·散列表
Knight_AL6 分钟前
使用 Nginx 为内网 Java 服务实现 HTTPS
java·nginx·https
提笔忘字的帝国7 分钟前
【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程
java·开发语言·macos
抹香鲸之海13 分钟前
Easyexcel 多级横向合并表头
java·开发语言·windows
烟沙九洲16 分钟前
JVM 堆内存分代
java·jvm
less is more_093016 分钟前
文献学习——计及分时电价的电缆配电网多时段二阶段有功与无功协调快速鲁棒优化调度方法
笔记·学习·算法
BD_Marathon16 分钟前
SpringMVC——bean加载控制
java·开发语言·数据库
进击的小头18 分钟前
18_C语言算法面试与进阶:高频算法题实战与学习路线规划
c语言·算法·面试