Java数组之冒泡排序
在操作数组时,经常需要对数组中的元素进行排序。接下来介绍一种非常常见的排序算法--冒泡排序。
在冒泡排序的过程中,不断地比较数组中相邻的元素,较小者向上浮,较大者向下沉,整个过程和水中气泡上升的原理相似,故称之为冒泡排序。
原理
第一步,从第一个元素开始,将相邻的两个元素进行比较,直到最后两个元素完成比较。如果前面的元素比后面的元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一趟的比较。
第二步,除了最后一个元素,将剩余的元素按照第一步的方法进行两两比较,这样就可以将数组中第二大的元素放到倒数第二个位置上。
第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。
总体而言,在冒泡排序中,程序的时间复杂度和空间复杂度随着程序的执行,均呈现递减趋势。
代码
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数组之冒泡排序相关推荐
- Java数组和冒泡排序
Java数组 数组分一维数组.二维数组和多维数组. 以下详细讲解的是一维数组和简单的冒泡法. 需知Java中数组长度一经定义,固定不变. 一般数组初始化(声明并指定数组长度) 数组的内存模型详解 基础 ...
- Java数组初始化, 冒泡排序, 查找
文章目录 数组快速入门 数组的使用 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 数组使用注意事项和细节 数组赋值机制 数组翻转 数组扩容 排序的介绍 冒泡排序法 数组的查找 ...
- Java数组实现冒泡排序
冒泡排序的思想: 对于一个乱序的数组,依次比较arr[i] 与 arr[i + 1] 的大小,小的放左边,大的放右边,每次冒泡排序的结果是找出数组中最大的值放在数组最右边,直到数组的值为从小往大排列为 ...
- java 数组的冒泡排序
//将五个整数升序排序 public static void main(String[] args) int[] nums=new int[5]; int i,j; //循环变量 int temp; ...
- java 数组冒泡排序、转置(降序)
1.java 数组冒泡排序 排序的基本原理(升序): 原始数据: 2 .1 .9 .0 .5 .3 .7 .6 .8: 第一次排序: 1 .2 .0 .5 .3 .7 .6 .8 .9 : 第二次 ...
- 18 - java基初 数组介绍 冒泡排序
文章目录 数组 1.数组的定义 2.数组声明创建 3.数组的初始化 1. 静态初始化 2. 动态初始化 3. 数组的默认初始化 4.数组的四个基本特点 5.数组边界 6.数组的使用 for循环 for ...
- java:数组的冒泡排序
eclipse使用Java实现数组的冒泡排序 文章目录 前言 方案 代码实现 前言 声明一个数组,包含10个元素,给每个元素赋值0~99的随机整数,使用冒泡算法对数组进行升序排序,并输出排序后的值 方 ...
- Java实现数组的冒泡排序
定义一个数组,Java实现从小到大冒泡排序. 结果如下: package 企业技术实习1105作业; /** 冒泡排序* */public class demo1 {public static voi ...
- java数组冒泡排序
冒泡排序(Bubble Sort)是常用的数组排序算法之一 冒泡排序 提示:冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面( ...
- java里冒泡排序编程案例_java编程题:用Java实现一个冒泡排序算法
/** * java编程题:用Java实现一个冒泡排序算法 */ public class Test12 { public static void main(String[] args) { int[ ...
最新文章
- python遍历queryset_查询集 QuerySet
- 如何使用Ubuntu打电话
- QuickPart应用系列
- python3 批量修改文件扩展名——递归
- koa源码分析-generator和yield分析
- KMP模式匹配算法——C++
- Oracle使用Shell脚本导出Excel表格
- 稳压二极管的原理和伏安特性
- java使用水晶报表,java处理水晶报表
- 荣耀9igoogle模式_将您的iGoogle主页导出到另一个帐户
- 微信公众号开发模式几点介绍
- linux系统下查找应用,Linux系统find查找命令运用
- 计算机二级C语言公共基础知识,以及习题总结(一)
- 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验
- java——Java环境搭建:JDK安装、常用命令
- (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航...
- hdmi接口有什么用_路由器USB接口有什么用 路由器USB接口作用介绍【详解】
- android sqlite fts4,SQLite FTS4使用首选语言
- linux ftp 解压缩命令,常用五种Linux环境中的压缩和解压命令示范 | OPS技术联盟
- css中的z-index层级问题
热门文章
- 2021-02-10 jdk11 对应的aspectjweaver版本--:0 can‘t find referenced pointcut pointCut
- 初级办公计算机,初级(计算机办公软件应用)教案
- 黑莓手机使用手册【转】
- NCC2105关于分管领导审批流设置另一方法
- 版权:大众保险被判向微软赔偿217万元
- 老毛子 K2 通过SSH 抓包
- eclipse插件下载及使用
- 低级鼠标钩子WH MOUSE LL
- 利用EDA365 SKILLS 生成gerber和手动生成
- delphi socket 怎样把接收到的二进制数据转换成字符串显示_【连载电子书二】Python基础数据类型详解(上)...