Java经典面试题:冒泡算法的使用

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍Java经典面试题:冒泡算法的使用以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

⭐什么是冒泡算法?

⭐为什么要使用冒泡?

⭐使用冒泡排序

1、代码示例

冒泡排序代码

 项目执行代码

2、执行结果

⭐使用冒泡排序的注意事项:(重点)

⭐冒泡算法使用总结:


⭐什么是冒泡算法?

冒泡算法是一种基础的排序算法。原理是多次遍历待排序的元素,每次比较相邻的两个元素,如果顺序不对则进行交换,直到所有元素都排好序为止。冒泡排序的特点是每一次遍历都会将最大(或最小)的元素沉到最后,并且每一次遍历都会有一个元素就位,因此被称为冒泡排序。

如下图所示:

⭐为什么要使用冒泡?

在实际应用中,冒泡算法可能并不是首选的排序算法,因为它的时间复杂度较高。然而,冒泡算法有以下几个优点:

  • 1. 简单易懂:冒泡算法的思想非常简单,容易理解和实现,即使对于初学者来说也比较容易掌握。
  • 2. 冒泡排序是稳定的:稳定性指的是如果两个元素的大小相等,经过排序后它们的相对位置保持不变。冒泡排序通过相邻元素的比较和交换,保证了相等元素的相对顺序不会改变,因此是稳定的排序算法。
  • 3. 适用于小规模数据:当待排序的数据规模比较小的时候,冒泡排序的效率并不会差到哪里去。由于冒泡排序的代码量较少且逻辑简单,对于数据量较小的情况下,可以使用冒泡排序来进行排序操作。

虽然冒泡算法在实际应用中可能并不是最优选择,但了解它的原理和特点对于理解排序算法的基本思想和思维方式是有帮助的。

⭐使用冒泡排序

1、代码示例

以下是使用冒泡排序算法进行数组排序的C#代码示例

冒泡排序代码
public void Bubble_sort(int[] List)
        {
            int i, t=1, Temp;//t是目前冒泡的次数,就是小于n-1;i是数组中的第几位元素;Temp是中间替换量,大家都懂哒
            bool Finish = false;//康康你到底冒泡冒完没有,刚开始是没有,所以判为F
            while((t<List.Length) && !Finish)
            {
                Finish = true;
                for (i = 0; i < List.Length - t; i++)
                {
                    if (List[i] > List[i + 1])
                    {
                        Finish = false;
                        Temp = List[i];
                        List[i] = List[i + 1];
                        List[i + 1] = Temp;//这里就是换数据的地方,其实可以简单化的,但是啊,我就是懒惰,聪明的,你,会写的。
                    }
                }
                t++;
            }
 
        }
 项目执行代码
using System;
 
namespace Bubble_Sort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Example = new int[] {-99,-4323,23,42,8848,114514,234 };
            Bubble bubble = new Bubble();
            bubble.Bubble_sort(Example);
            foreach(var item in Example)
            {
 
                Console.Write(item+"," );
                
            }
            Console.Read();
        }
 
    }
 
    public class Bubble
    {
        public void Bubble_sort(int[] List)
        {
            int i, t=1, Temp;//t是目前冒泡的次数,就是小于n-1;i是数组中的第几位元素;Temp是中间替换量,大家都懂哒
            bool Finish = false;//康康你到底冒泡冒完没有,刚开始是没有,所以判为F
            while((t<List.Length) && !Finish)
            {
                Finish = true;
                for (i = 0; i < List.Length - t; i++)
                {
                    if (List[i] > List[i + 1])
                    {
                        Finish = false;
                        Temp = List[i];
                        List[i] = List[i + 1];
                        List[i + 1] = Temp;//这里就是换数据的地方,其实可以简单化的,但是啊,我就是懒惰,聪明的,你,会写的。
                    }
                }
                t++;
            }
 
        }
    }
}

2、执行结果

排序后的数组效果:-432 -9 23 42 234 8848 114514

⭐使用冒泡排序的注意事项:(重点)

使用冒泡排序时需要注意以下几点:

1、冒泡排序是一种相邻元素比较和交换的算法,因此它是一种稳定排序算法,即相等元素的相对位置不会发生改变。

2、冒泡排序的时间复杂度为O(n^2),其中n为待排序数列的长度。因此,在处理大规模数据时,冒泡排序效率较低,不适合使用。

3、冒泡排序过程中,每一轮都会将一个最大(或最小)的元素"冒泡"到数列的末尾。因此,在第一次遍历后,最后一个元素已经是最大(或最小)的元素,无需再进行比较。

4. 如果待排序数列已经是有序的,冒泡排序仍然会进行比较和交换操作,但并不会改变数列的顺序。因此,可以通过设置一个标识位来判断数列是否已经有序,减少不必要的操作。

5. 冒泡排序是一种稳定的排序算法,相等元素的相对位置不会改变。因此,如果对于某些情况下需要保持相等元素的相对顺序时,冒泡排序是一种合适的选择。

综上所述,冒泡排序虽然简单易懂,但效率较低。在实际应用中,更推荐使用其他更高效的排序算法,如快速排序、归并排序等。

冒泡算法使用总结:

冒泡排序是一种简单但效率较低的排序算法。它的基本思想是通过相邻元素的比较和交换,将最大(或最小)的元素逐渐"冒泡"到数列的末尾,从而实现排序的目的。

具体步骤如下:

  • ①:从待排序的数列中,依次比较相邻的两个元素,如果前者比后者大(或小),则交换它们的位置。
  • ②:重复执行上述比较和交换的过程,直到整个数列排序完成。

冒泡排序的时间复杂度为O(n^2),其中n为待排序数列的长度。虽然冒泡排序的效率不高,但它有一些优点:简单易懂、稳定性好、适用于小规模数据等。因此,了解冒泡排序的原理和特点对于理解排序算法的基本思想和思维方式是有帮助的。

总结不易,希望宝宝们不要吝啬亲爱的👍哟(^U^)ノ~YO!如有问题,欢迎评论区批评指正😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/259452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查&#xff0c;原因是npm默认安装的mongodb插件是最新版6.3.0 &#xff0c;而mongodb数据库版本是4.0.0 &#xff0c;两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件&#xff0c;再安…

comfyUI + animateDiff video2video AI视频生成工作流介绍及实例

原文&#xff1a;comfyUI animateDiff video2video AI视频生成工作流介绍及实例 - 知乎 目录 收起 前言 准备工作环境 comfyUI相关及介绍 comfyUI安装 生成第一个视频 进一步生成更多视频 注意事项 保存为不同的格式 视频宽高设置 种子值设置 提示词与负向提示词…

uml用例图是什么?有哪些要素?

UML用例图是什么&#xff1f; UML用例图&#xff08;Unified Modeling Language Use Case Diagram&#xff09;是一种用于描述系统功能和用户之间交互的图形化建模工具。它是UML的一部分&#xff0c;主要用于识别和表示系统中的各个用例&#xff08;用户需求或功能点&#…

EMNLP 2023 亮点回顾:大模型时代下的 NLP 研究

作为自然语言处理&#xff08;NLP&#xff09;领域的顶级盛会&#xff0c;EMNLP 每年都成为全球研究者的关注焦点。2023 年的会议在新加坡举行&#xff0c;聚集了数千名来自世界各地的专家学者&#xff0c;也是自疫情解禁以来&#xff0c;中国学者参会最多的一次。巧的是&#…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式&#xff0c;或者EPIC Games Loader&#xff0c;启动虚幻引擎。 启动完成后&#xff0c;会打开项目管理的界面&#xff0c;可以看…

运算放大电路的输入偏置电流和输入失调电流

一般运放的datasheet中会列出众多的运放参数&#xff0c;有些易于理解&#xff0c;我们常关注&#xff0c;有些可能会被忽略了。在接下来的一些主题里&#xff0c;将对每一个参数进行详细的说明和分析。力求在原理和对应用的影响上把运放参数阐述清楚。由于本人的水平有限&…

软件测试中如何测试算法?

广义的算法是指解决问题的方案&#xff0c;小到求解数学题&#xff0c;大到制定商业策略&#xff0c;都可以叫做算法。而我们今天讨论的软件测试中的算法&#xff0c;对应的英文单词为 Algorithm&#xff0c;专指计算机处理复杂问题的程序或指令。 随着最近几年人工智能等领域…

【C语言初阶】数组

目录 一、一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 二、二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 三、数组越界 四、数组作…

每日一博 - Protobuf vs. Protostuff:性能、易用性和适用场景分析

文章目录 历史区别联系性能差异最佳实践场景分析小结 历史 对于Protostuff和Protobuf的关系&#xff0c;需要了解它们的起源和发展。 Protobuf&#xff08;Protocol Buffers&#xff09;是由Google开发的一种数据序列化格式&#xff0c;用于结构化数据的存储和交换。它最初是…

【✅Java中有了基本类型为什么还需要包装类?】

✅Java中有了基本类型为什么还需要包装类&#xff1f; ✅Java中有了基本类型为什么还需要包装类✅Java的8中基本数据类型 ✅知识拓展✅基本类型和包装类型的区别✅如何理解自动拆装箱&#xff1f;✅拆箱与装箱✅自动拆装箱✅自动拆装箱原理 ✅哪些地方会自动拆装箱&#xff1f;…

C++20形式的utf-8字符串转宽字符串,不依赖编译器编码形式

默认的char[]编码都是要看编译器编译选项的&#xff0c;你选了ANSI那它就是ANSI&#xff0c;你选了UTF8那它就是UTF8. 【注意&#xff1a;经典DevC只支持ANSI编码&#xff08;痛苦&#xff09;&#xff1b;上图是小熊猫DevC&#xff0c;则有这个选项】 这一点对我的代码造成了…

【教3妹学编程-算法题】循环移位后的矩阵相似检查

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&…

Ubuntu 常用命令之 apt-get 命令用法介绍

apt-get是Ubuntu系统下的一个命令行工具&#xff0c;用于处理包。这个命令可以自动下载和安装软件包及其依赖项。它是Advanced Packaging Tool (APT)的一部分&#xff0c;APT是处理包的高级工具&#xff0c;可以处理复杂的包关系&#xff0c;如依赖关系等。 apt-get命令的常见…

linux: ip route 与 route 用法详解与对比

文章目录 1. 引言2. ip route2.1 描述2.2 语法2.3 参数2.4 例子 3. route3.1 描述3.2 语法3.3 参数3.4 例子 4. 对比5. 参考 1. 引言 本文主要介绍 ip route 以及 route 的用法和区别。 2. ip route 2.1 描述 用于管理静态路由表。linux 系统中&#xff0c;可以自定义从 1&…

聚类算法及可视化方法的实践与探索

簇内平方和表示数据点到其簇内质心的距离的平方和&#xff0c;公式如下&#xff1a; 其中&#xff0c; 是k簇数&#xff0c; ni是第 i 个簇的样本数&#xff0c; xij是第 i个簇中的第 j 个样本。 import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sk…

Python Opencv实践 - 手势音量控制

本文基于前面的手部跟踪功能做一个手势音量控制功能&#xff0c;代码用到了前面手部跟踪封装的HandDetector.这篇文章在这里&#xff1a; Python Opencv实践 - 手部跟踪-CSDN博客文章浏览阅读626次&#xff0c;点赞11次&#xff0c;收藏7次。使用mediapipe库做手部的实时跟踪&…

47 星南二楼

动态规划&#xff0c;相当于求解最长子序列问题 #include <iostream> using namespace::std; using std::cout; using std::cin; int n; int a[5100],dp[5100];int xnel(int n, int a[]) {int result 0;for(int i0; i<n; i){for(int j0; j<i; j){if(a[j]<a[…

node版本与npm版本不对应的解决方案

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 错误情况 今天遇到了个问题&#xff0c;原来用的node的版本是v14.16.0的&#xff0c;后来升级到了最新版20多的时候&#xff0c;以前的项目启动不了。 于是我手动将node卸载了&#xff0c…

【2023年网络安全优秀创新成果大赛专刊】银行数据安全解决方案(天空卫士)

在2023年网络安全优秀创新成果大赛&#xff0c;成都分站中&#xff0c;天空卫士银行数据安全方案获得优秀解决方案奖。与此同时&#xff0c;天空卫士受信息安全杂志邀请&#xff0c;编写《银行数据安全解决方案》。12月6日&#xff0c;天空卫士编写的《银行数据安全解决方案》做…

DAY11

问题一&#xff1a;指针与引用的区别 疑问 为什么引用的本质是指针常量&#xff0c;但是对它求sizeof却是变量所占内存空间的大小那&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 1.引用是给变…
最新文章