在操作数组时,经常需要对数组中的元素进行排序。接下来介绍一种非常常见的排序算法--冒泡排序。

在冒泡排序的过程中,不断地比较数组中相邻的元素,较小者向上浮,较大者向下沉,整个过程和水中气泡上升的原理相似,故称之为冒泡排序。

原理

第一步,从第一个元素开始,将相邻的两个元素进行比较,直到最后两个元素完成比较。如果前面的元素比后面的元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一趟的比较。

第二步,除了最后一个元素,将剩余的元素按照第一步的方法进行两两比较,这样就可以将数组中第二大的元素放到倒数第二个位置上。

第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。

总体而言,在冒泡排序中,程序的时间复杂度和空间复杂度随着程序的执行,均呈现递减趋势。

代码

public class Example32{public static void main(String[] args){int[] arr={9, 8, 3, 5, 2};System.out.print("冒泡排序前:");printArray(arr);                                // 打印排序前的数组元素bubbleSort(arr);                               // 调用排序方法System.out.print("冒泡排序后:");printArray(arr);                               // 打印排序后的数组元素}// 定义打印数组方法public static void printArray(int[] arr){for(int i=0; i<arr.length; i++){                // 从第一个数组元素开始遍历数组元素System.out.print(arr[i]+" ");             // 输出数组元素,并加空格以控制格式}System.out.print("\n");                            // 完成一次调用后换行}// 定义冒泡排序方法public static void bubbleSort(int[] arr){for(int i=0; i<arr.length -1; i++){              // 外层循环,控制总共需要比较的趟数for(int j=0; j<arr.length -i -1; j++){      // 内层循环,控制每趟需要比较的次数if(arr[j] > arr[j+1]){                    // 比较相邻元素// 以下三行代码用于交换两个元素int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.print("第"+(i+1)+"轮排序后:");   // 每趟执行完后,输出提示信息printArray(arr);                         // 输出本趟执行后的结果}}
}

结果

分析

bubbleSort()方法通过一个嵌套for循环实现了冒泡排序。

其中外层循环用来控制比较的趟数,即【数组元素的个数-1】,每一趟比较,都可以确定一个元素的位置,由于最后一个元素不需要比较,因此外层循环的次数为【arr.length-1】。

内层循环用于控制每趟比较的次数,由于变量i在循环的过程中是自增的,因此程序每执行一趟,每次比较的次数递减。

每次比较的过程中,如果前者小于后者,则交换两个元素的位置。

在第一轮比较中,第一个元素【9】为最大值,因此它在每次比较时都会发生位置的交换,直到被放到最后一个位置。第二轮比较中,元素【8】为第二大值,比较过程和第一轮比较类似,直到被放到倒数第二个位置。循环第三轮和第四轮比较,第四轮比较完成后,数组元素已经完成了排序。

其交换过程,类似于A杯子装了可乐,B杯子装了雪碧,现在需要把A杯子的可乐和B杯子的雪碧互换,因此需要拿出C杯子(即临时变量temp)。把B杯子的雪碧倒入C杯子,此时B杯子为空杯;把A杯子的可乐倒入B杯子,此时A杯子为空杯;再将C杯子的雪碧倒入A杯子;此时C杯子为空杯,A杯子为雪碧,B杯子为可乐,即完成了可乐和雪碧的互换。

图例

Java数组之冒泡排序相关推荐

  1. Java数组和冒泡排序

    Java数组 数组分一维数组.二维数组和多维数组. 以下详细讲解的是一维数组和简单的冒泡法. 需知Java中数组长度一经定义,固定不变. 一般数组初始化(声明并指定数组长度) 数组的内存模型详解 基础 ...

  2. Java数组初始化, 冒泡排序, 查找

    文章目录 数组快速入门 数组的使用 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 数组使用注意事项和细节 数组赋值机制 数组翻转 数组扩容 排序的介绍 冒泡排序法 数组的查找 ...

  3. Java数组实现冒泡排序

    冒泡排序的思想: 对于一个乱序的数组,依次比较arr[i] 与 arr[i + 1] 的大小,小的放左边,大的放右边,每次冒泡排序的结果是找出数组中最大的值放在数组最右边,直到数组的值为从小往大排列为 ...

  4. java 数组的冒泡排序

    //将五个整数升序排序 public static void main(String[] args) int[] nums=new int[5]; int i,j; //循环变量 int temp; ...

  5. java 数组冒泡排序、转置(降序)

    1.java 数组冒泡排序 排序的基本原理(升序): 原始数据:  2 .1 .9 .0 .5 .3 .7 .6 .8: 第一次排序: 1  .2 .0 .5 .3 .7 .6 .8 .9 : 第二次 ...

  6. 18 - java基初 数组介绍 冒泡排序

    文章目录 数组 1.数组的定义 2.数组声明创建 3.数组的初始化 1. 静态初始化 2. 动态初始化 3. 数组的默认初始化 4.数组的四个基本特点 5.数组边界 6.数组的使用 for循环 for ...

  7. java:数组的冒泡排序

    eclipse使用Java实现数组的冒泡排序 文章目录 前言 方案 代码实现 前言 声明一个数组,包含10个元素,给每个元素赋值0~99的随机整数,使用冒泡算法对数组进行升序排序,并输出排序后的值 方 ...

  8. Java实现数组的冒泡排序

    定义一个数组,Java实现从小到大冒泡排序. 结果如下: package 企业技术实习1105作业; /** 冒泡排序* */public class demo1 {public static voi ...

  9. java数组冒泡排序

    冒泡排序(Bubble Sort)是常用的数组排序算法之一 冒泡排序 提示:冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面( ...

  10. java里冒泡排序编程案例_java编程题:用Java实现一个冒泡排序算法

    /** * java编程题:用Java实现一个冒泡排序算法 */ public class Test12 { public static void main(String[] args) { int[ ...

最新文章

  1. python遍历queryset_查询集 QuerySet
  2. 如何使用Ubuntu打电话
  3. QuickPart应用系列
  4. python3 批量修改文件扩展名——递归
  5. koa源码分析-generator和yield分析
  6. KMP模式匹配算法——C++
  7. Oracle使用Shell脚本导出Excel表格
  8. 稳压二极管的原理和伏安特性
  9. java使用水晶报表,java处理水晶报表
  10. 荣耀9igoogle模式_将您的iGoogle主页导出到另一个帐户
  11. 微信公众号开发模式几点介绍
  12. linux系统下查找应用,Linux系统find查找命令运用
  13. 计算机二级C语言公共基础知识,以及习题总结(一)
  14. 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验
  15. java——Java环境搭建:JDK安装、常用命令
  16. (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航...
  17. hdmi接口有什么用_路由器USB接口有什么用 路由器USB接口作用介绍【详解】
  18. android sqlite fts4,SQLite FTS4使用首选语言
  19. linux ftp 解压缩命令,常用五种Linux环境中的压缩和解压命令示范 | OPS技术联盟
  20. css中的z-index层级问题

热门文章

  1. 2021-02-10 jdk11 对应的aspectjweaver版本--:0 can‘t find referenced pointcut pointCut
  2. 初级办公计算机,初级(计算机办公软件应用)教案
  3. 黑莓手机使用手册【转】
  4. NCC2105关于分管领导审批流设置另一方法
  5. 版权:大众保险被判向微软赔偿217万元
  6. 老毛子 K2 通过SSH 抓包
  7. eclipse插件下载及使用
  8. 低级鼠标钩子WH MOUSE LL
  9. 利用EDA365 SKILLS 生成gerber和手动生成
  10. delphi socket 怎样把接收到的二进制数据转换成字符串显示_【连载电子书二】Python基础数据类型详解(上)...