冒泡排序的简单理解

这篇具有很好参考价值的文章主要介绍了冒泡排序的简单理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

详细描述

冒泡排序是一种交换排序,基本思想是在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。

即每当两个相邻的数比较后发现它们的顺序与排序要求相反时,就将它们互换。

冒泡排序详细的执行步骤如下:

  1. 从第一个元素开始,比较相邻的元素,如果前一个比后一个大,就交换它们两个;
  2. 从前往后,对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就会是最大的数;
  3. 将这次找出的最大元素放在最后一个元素位置上,然后针对除这个最大元素以外的其他所有元素重复以上 1~2 步骤;
  4. 重复以上步骤,直到最后第一个元素和第二个元素完成比较、交换,则排序完成。

算法图解

冒泡排序的简单理解

问题解疑

冒泡排序是原地排序算法吗?

冒泡排序是一个原地排序算法,过程只涉及相邻数据的交换操作,只需要常量级的临时空间,它的空间复杂度是 O(1)。

冒泡排序是稳定的排序算法吗?

为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等时可以不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。

冒泡排序的时间复杂度是多少?

使用最优时间复杂度解法,原序列是有序时的时间复杂度是 O(n);最坏情况时间复杂度为 O(n2);平均时间复杂度是 O(n2)。

代码实现

排序接口

 
package cn.fatedeity.algorithm.sort;
/**
* 排序接口
*/
public interface Sort {
int[] sort(int[] numbers);
}

排序抽象类

 
package cn.fatedeity.algorithm.sort;
/**
* 排序抽象类
*/
public abstract class AbstractSort implements Sort {
protected void swap(int[] numbers, int src, int target) {
int temp = numbers[src];
numbers[src] = numbers[target];
numbers[target] = temp;
}
}

冒泡排序类

 
package cn.fatedeity.algorithm.sort;
/**
* 冒泡排序类
*/
public class BubbleSort extends AbstractSort {
@Override
public int[] sort(int[] numbers) {
if (numbers.length <= 1) {
return numbers;
}
for (int i = 0; i < numbers.length - 1; i++) {
boolean doSwap = false;
for (int j = 0; j + 1 < numbers.length - i; j++) {
if (numbers[j] > numbers[j + 1]) {
this.swap(numbers, j, j + 1);
doSwap = true;
}
}
// 优化基础冒泡排序的步骤
if (!doSwap) {
// 如果遍历整个序列无需交换,则表示整个序列已经完全有序
return numbers;
}
}
return numbers;
}
}

 文章来源地址https://www.toymoban.com/news/detail-411776.html

到了这里,关于冒泡排序的简单理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Shell脚本实现数组冒泡排序等简单算法排序

    目录 一、冒泡排序 1.简介 2.基本思想 3.算法思路 4.shell脚本实现 二、选择排序 1.简介 2.基本思想 3.shell脚本实现 三、插入排序 1.算法思路 2.shell脚本实现 四、反转排序 1.作用 2.shell脚本实现 类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。 冒

    2024年02月09日
    浏览(111)
  • 排序算法之冒泡排序(详细版)

    📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:快给我点赞赞💗 冒泡排序 (Bubble Sort)***,是一种计算机科学领域的较简单的排序算法。 它 重复地走访 过要排序的元素列表, 依次比较两个相邻 的元素,如果顺序(如从大到小、首字母从Z到A)错误

    2023年04月26日
    浏览(34)
  • Go 语言实现冒泡排序算法的简单示例

    以下是使用 Go 语言实现冒泡排序算法的简单示例: 在这个例子中, bubbleSort 函数接收一个整数切片,对切片中的元素进行冒泡排序。在 main 函数中,我们定义了一个示例数组,调用 bubbleSort 函数对其进行排序,并输出结果。 注意,冒泡排序算法的时间复杂度为 O(n^2),因此对

    2024年01月23日
    浏览(45)
  • 冒泡排序详细详解

    因为在面试时  经常手写 冒泡排序   可是冒泡排序看起来容易  理解起来也是有点问题   所以今天把冒泡排序的知识点详细的从头整理一下 如果下面的文字不理解   可以参考B站【Java基础入门 冒泡排序】https://www.bilibili.com/video/BV1td4y1g7Fy?vd_source=581d732b20cb23e01428068f153a99e

    2024年02月07日
    浏览(30)
  • 【交换排序】手撕八大排序之快速排序和冒泡排序(超级详细)

    目录 🍁一.快速排序 🍀Ⅰ.Hoare法 🍇Ⅱ.挖坑法  🍋1.递归版本 🍊2.关于时间复杂度 🍎3.快速排序的优化之三数取中法 🍌4.非递归版本(使用栈实现) 🍐5.非递归的挖坑大法的全部代码 🍑二.冒泡排序(设置flag值)  🍁1.从前往后冒 🏵️2.从后往前冒 快速排序: 英国计算

    2024年02月12日
    浏览(36)
  • 简单描述下对 Restful 风格的理解?

    Restful 风格是一种软件架构的风格,主要用于客户端和服务器之间的交互。它基于HTTP协议,使用http方法(如 GET/POST/PUT/DELETE 等)来操作资源。 Restful 风格的主要特点包括:     1、无状态: 每次请求都是独立的,服务器不报错客户端的任何状态信息。这样可以简化服务器的设

    2024年02月11日
    浏览(37)
  • 用Python实现快速排序和冒泡排序,代码+详细解析

    1、冒泡排序         冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端 。 2、快速排序         快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地

    2024年02月11日
    浏览(41)
  • c++排序算法——冒泡排序(不会的一定要看,超级详细)

    今天,我们来学习一种排序算法—— 冒泡排序 。 首先,先问三个问题: 想象一下,如果字典不是按照字母顺序排列,查找一个单词,你得查到什么时候?这就是为什么人们引入了分类的概念,因为其 极大地帮助我们快速搜索物品 。 或者说,排序是一种常用的整理信息的方

    2024年02月16日
    浏览(44)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序,堆排序】超详细~~

    目录 冒泡排序(BubbleSort): 代码详解:  冒泡排序的优化:  选择排序(SelectSort): 代码详解:  插入排序(InsertSort): 代码详解:  希尔排序(ShellSort):  法一(交换法)代码详解:  法二(移位法--插入排序的优化)代码详解: 快速排序(QuickSort):  代码详解:  归并排

    2024年02月20日
    浏览(46)
  • 数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)详细讲解

    当你觉的自己不行时,你就走到斑马线上,这样你就会成为一个行人 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 前后指针版本 2.3 快速排序优化 2.3.1 随机数选key 2.3.2 三数取中选key 2.3.3 递归到小的子区间使用插入排

    2024年04月10日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包