Java实现冒泡算法及优化冒泡算法
基本思想
冒泡排序(Bubble Sort)通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序(前后大小与要求的顺序不一致)则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
代码实现
public class BubbleSort {/*** 按照从小到达的顺序进行排序* @param array 要进行排序的数组*/public static void bubbleSort(int[] array){int temp = 0;//用于前后元素交换时使用//数组有n个元素,排序只需n-1次就能完成for (int i = 0; i <array.length-1 ; i++) {for (int j = 0; j <array.length-1-i ; j++) {if (array[j]>array[j+1]){//前后元素进行交换,可以看出冒泡算法是一种交换算法temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}}
}
代码解释:
测试数组:int[] array = {23,9,-2,-1,8,99,100,91};
执行结果:
算法优化
可以从上述的每一趟的输出结果可以看出,在第二次排序完成后整个数组就已经按照从小到大的顺序排列了,后面的几次循环只是在执行if语句,而实际上并没有进行排序。浪费了时间和空间
优化:
int temp = 0;//用于前后元素交换时使用
boolean isChanged = false;//标识变量,记录数组是否提前完成了排序//数组有n个元素,排序只需n-1次就能完成
for (int i = 0; i <array.length-1 ; i++) {for (int j = 0; j <array.length-1-i ; j++) {if (array[j]>array[j+1]){isChanged =true;//证明元素交换过,即数组还未完全有序temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}if (!isChanged){break;//左右元素未交换,说明数组已完成排序,结束排序循环}System.out.printf("第%d次排序结果",i+1);System.out.println(Arrays.toString(array));isChanged = false;//重置,用于下次判断,这个重置非常重要
}
执行结果:
可以看出来for循环只执行了两次就结束并完成了数组的排序
Java实现冒泡算法及优化冒泡算法相关推荐
- 一种新颖的智能优化算法—飞蛾扑火优化(MFO)算法
目录 一.算法理论基础 二.飞蛾扑火算法数学模型 三.MFO算法流程 四.MFO有效解决优化问题的分析 飞蛾扑火优化算法是Mirjalili于2015年提出的一种新型智能优化算法,其灵感来源于一种特殊 ...
- 计算机网络 对Reno算法的优化——NewReno算法
Reno状态迁移图 实例分析Reno和NewReno 我们假设当前处于拥塞避免状态. 如下图,[0-11]的这个窗口内的12个数据包从发送方发送.不过1.4数据包还没到达接收方就丢失了. 一般情况下, ...
- 排序算法整合(冒泡,快速,希尔,拓扑,归并)
冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. 它是一种较简单的排序算法.它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小:如果前者比后 ...
- python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现
写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...
- 【数据结构与算法】排序 冒泡、插入、选择 O(n^2)
冒泡.插入.选择 O(n2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.如何分析一个排序算法? 学习排序算法的思路?明确原理.掌握实现以及分析性能. ...
- 回炉篇5—数据结构(4)之冒泡、选择、插入排序算法
冒泡.选择.插入排序算法 排序大家都很熟了,很古老的算法,古老才有必要回炉再看一遍,经典才值得研究. 1.冒泡排序 从字面意思理解,水泡从水底冒出到水面的过程中,由小慢慢大,最后大泡泡冒出水面,了解这 ...
- php冒泡算法排序,PHP算法大全(2)冒泡排序算法解决差生排序问题
前言 算法是有用的,也是枯燥的,我们尽量用生活中的例子来描述.排序算法是算法中最基础的部分,今天我们一起来排序算法中的冒泡排序算法. 内容概要: 1.什么是冒泡算法-差生排序问题. 2.冒泡算法的动画 ...
- 2021新型面试题-血虐面试官斩获字节跳动Offer!Android 精选版面试题级答案(Android+Java+算法+性能优化+四大组件...)
前言 双非本科,自认为技术水平不差,8月从美图实习离职回学校,各种倒霉的事不断,到现在11月,为了找个好的环境复习,9月又在学校附近租了房,基本是没有面试通知就学不进去,前面由于过于自信,也没拿个保底 ...
- 冒泡法和选择法 排序算法实现
@冒泡法和选择法 排序算法实现 void swap(int& a, int& b) {int temp=0;temp = a;a = b;b = temp; }void bubble_ ...
最新文章
- Keepalived — VRRP 的 Linux 软件实现
- 将 Docker 踢出群聊后,Kubernetes 还能否欢快地蹦跶吗?
- 第18条:接口优于抽象类
- lucene学习001
- ArcMap 水文分析 部分功能
- 县级外业调查及举证软件_我公司中标江西省第三次全国国土调查县级建库软件项目...
- [渝粤教育] 广东-国家-开放大学 21秋期末考试市场营销10256k2
- FL Studio中钢琴卷帘窗的工具的使用
- 软件行业各职位英文缩写
- 微信小程序蓝牙连接TSPL打印机打印图片思路
- AB1562_UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
- 基于数据挖掘的商业银行客户关系管理系统应用研究
- 文化馆建筑方案设计原理及方案
- uni-app-微信小程序-预览报错
- kali系统下安装Vscode
- Portal产品对比分析报告
- 中标麒麟NeokylinV7关闭广播消息
- web开发从入门到精通一(详细)
- 多元线性回归分析练习题
- 美团拼多多挑起社区团购新战事,谁能“见血封喉”?