当前位置: 首页 > news >正文

[数据结构] 冒泡排序

概述

  冒泡排序通过重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,直到没有再需要交换的元素为止(对n个项目需要O(n^2)的比较次数)。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

实现步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

这里写图片描述

  冒泡排序为一列数字进行排序的过程 

实现性能

  • 最差时间复杂度

O(n^2)

  • 最优时间复杂度

O(n) 

  • 平均时间复杂度

O(n^2)

  • 最差空间复杂度

总共O(n),需要辅助空间O(1)

Java实现

public static void main(String[] args) {
        int[] number = {95,45,15,78,84,51,24,12};
        bubble_sort(number);
        for(int i = 0; i < number.length; i++) {
            System.out.print(number[i] + " ");
            }
    }
    public static void bubble_sort(int[] arr) {
            int  temp, len = arr.length;
            for (int i = 0; i < len - 1; i++)
                for (int j = 0; j < len - 1 - i; j++)
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                }
        }


参考:

https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F#C.E8.AF.AD.E8.A8.80

相关文章:

  • NIPT无创产前分析思路
  • xshell、putty远程连接
  • 利用GitHub Pages和Hexo搭建个人博客
  • 为什么Python发展得如此之快?
  • 程序员为什么要时刻保持危机感?
  • 高并发服务设计——缓存
  • 关于领域模型与技术架构的关系的思考
  • 学会容器服务帮你打造Docker云端最佳运行环境
  • ASP.NET中 ListView(列表视图)的使用前台绑定
  • 1507 酒厂选址
  • win10系统的简单优化
  • Unity VR全景漫游
  • 查找、移除某个视图上的某类控件
  • linux 巨页使用测试以及勘误1
  • CSS使图片变灰
  • ----------
  • Android Studio:GIT提交项目到远程仓库
  •  D - 粉碎叛乱F - 其他起义
  • go语言学习初探(一)
  • JavaScript类型识别
  • overflow: hidden IE7无效
  • Python利用正则抓取网页内容保存到本地
  • React Transition Group -- Transition 组件
  • React-flux杂记
  • React-redux的原理以及使用
  • spring security oauth2 password授权模式
  • Twitter赢在开放,三年创造奇迹
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • zookeeper系列(七)实战分布式命名服务
  • 机器学习学习笔记一
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 深入 Nginx 之配置篇
  • 时间复杂度与空间复杂度分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 王永庆:技术创新改变教育未来
  • - 转 Ext2.0 form使用实例
  • puppet连载22:define用法
  • 阿里云移动端播放器高级功能介绍
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • $L^p$ 调和函数恒为零
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)创业家杂志:UCWEB天使第一步
  • (转)大型网站的系统架构
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ..回顾17,展望18