13_冒泡算法(附完整java代码)
13_冒泡算法
一、基本介绍
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)
二、图示冒泡排序
三、冒泡排序应用实例
3.1 说明冒泡排序过程
举一个具体的案例来说明冒泡排序法。我们将五个无序的数:3、9、-1、10、-5,使用冒泡排序法将其排成一个从小到大的有序数列
原始数组:3, 9, -1, 10, -5第一趟排序
(1) 3, 9, -1, 10, -5 // 如果相邻的元素逆序就交换
(2) 3, -1, 9, 10, -5
(3) 3, -1, 9, 10, -5
(4) 3, -1, 9, -5, 10第二趟排序
(1) -1, 3, 9, -5 10 //交换
(2) -1, 3, -5, 9, 10
(3) -1, 3, -5, 9, 10第三趟排序
(1) -1, 3, -5, 9, 10
(2) -1, -5, 3, 9, 10第四趟排序
(1) -5, -1, 3, 9, 10
小结冒泡排序规则:
- 一共进行 (arr.length - 1) 次大的循环;
- 每一趟排序的次数在逐渐减少;
- (如果我们发现在某趟排序中,没有发生一次交换,可以提前结束冒泡排序(优化);
3.2 代码展示冒泡排序的演变过程
//展示冒泡排序的演变过程
//第一趟排序,将最大的数排在最后
for (int i = 0; i < arr.length - 1; i++) {//如果前面的数比后面的数大则交换if (arr[i] > arr[i + 1]){arr[i] = arr[i] + arr[i + 1];arr[i + 1] = arr[i] - arr[i + 1];arr[i] = arr[i] - arr[i + 1];}
}
System.out.print("第一趟排序后的数组:");
System.out.println(Arrays.toString(arr));
System.out.println("-------------");//第二趟排序,将第二大的数排在倒数第二个位置
for (int i = 0; i < arr.length - 1 - 1; i++) {//如果前面的数比后面的数大则交换if (arr[i] > arr[i + 1]){arr[i] = arr[i] + arr[i + 1];arr[i + 1] = arr[i] - arr[i + 1];arr[i] = arr[i] - arr[i + 1];}
}
System.out.print("第二趟排序后的数组:");
System.out.println(Arrays.toString(arr));
System.out.println("-------------");//第三趟排序,将第三大的数排在倒数第三个位置
for (int i = 0; i < arr.length - 1 - 1 - 1; i++) {//如果前面的数比后面的数大则交换if (arr[i] > arr[i + 1]){arr[i] = arr[i] + arr[i + 1];arr[i + 1] = arr[i] - arr[i + 1];arr[i] = arr[i] - arr[i + 1];}
}
System.out.print("第三趟排序后的数组:");
System.out.println(Arrays.toString(arr));
System.out.println("-------------");//第四趟排序,将第四大的数排在倒数第四个位置
for (int i = 0; i < arr.length - 1 - 1 - 1 - 1; i++) {//如果前面的数比后面的数大则交换if (arr[i] > arr[i + 1]){arr[i] = arr[i] + arr[i + 1];arr[i + 1] = arr[i] - arr[i + 1];arr[i] = arr[i] - arr[i + 1];}
}
System.out.print("第四趟排序后的数组:");
System.out.println(Arrays.toString(arr));
3.3 冒泡排序代码实现
//冒泡排序的时间复杂度 O(n^2)
for (int i = arr.length - 1; i > 0; i--) {for (int j = 0; j < i; j++) {//如果前面的数比后面的数大则交换if (arr[j] > arr[j + 1]){arr[j] = arr[j] + arr[j + 1];arr[j + 1] = arr[j] - arr[j + 1];arr[j] = arr[j] - arr[j + 1];}}System.out.print("第" + (arr.length - i) + "趟排序后的数组:");System.out.println(Arrays.toString(arr));
}System.out.print("冒泡排序后的数组:");
System.out.println(Arrays.toString(arr));
3.4 冒泡排序优化
//冒泡排序的时间复杂度 O(n^2)
boolean flag = false; //标识变量,表示是否进行过交换
for (int i = arr.length - 1; i > 0; i--) {for (int j = 0; j < i; j++) {//如果前面的数比后面的数大则交换if (arr[j] > arr[j + 1]){flag = true;arr[j] = arr[j] + arr[j + 1];arr[j + 1] = arr[j] - arr[j + 1];arr[j] = arr[j] - arr[j + 1];}}System.out.print("第" + (arr.length - i) + "趟排序后的数组:");System.out.println(Arrays.toString(arr));if (!flag){//在一趟排序中,一次交换都没有发生break;}else {flag = false; //重置false,进行下次判断}
}
四、完整java代码
public class BubbleSort {public static void main(String[] args) {int[] arr = {3,9,-1,10,-5};System.out.println("冒泡排序前的数组:" + Arrays.toString(arr));bubbleSort(arr);System.out.print("冒泡排序后的数组:");System.out.println(Arrays.toString(arr));}//将冒泡排序算法,封装成一个方法public static void bubbleSort(int[] arr){//冒泡排序的时间复杂度 O(n^2)boolean flag = false; //标识变量,表示是否进行过交换for (int i = arr.length - 1; i > 0; i--) {for (int j = 0; j < i; j++) {//如果前面的数比后面的数大则交换if (arr[j] > arr[j + 1]){flag = true;arr[j] = arr[j] + arr[j + 1];arr[j + 1] = arr[j] - arr[j + 1];arr[j] = arr[j] - arr[j + 1];}}System.out.print("第" + (arr.length - i) + "趟排序后的数组:");System.out.println(Arrays.toString(arr));if (!flag){//在一趟排序中,一次交换都没有发生break;}else {flag = false; //重置false,进行下次判断}}}
}
13_冒泡算法(附完整java代码)相关推荐
- java 对音频文件降噪_(转)音频降噪算法 附完整C代码
转:https://www.cnblogs.com/cpuimage/p/8905965.html 降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法 ...
- 音频降噪算法 附完整C代码
本文转载自博客:https://cloud.tencent.com/developer/article/1117226 降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言 ...
- 果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)
果蝇优化算法的核心是利用果蝇搜索实物的机制来对问题进行寻优.果蝇根据气味来确定食物的位置,食物腐烂程度越高,气味越大,果蝇对其越敏感.果蝇的觅食行为如下图: Fig1. 果蝇觅食行为示意图 1.果蝇位 ...
- wav文件降噪c语言,音频降噪算法 附完整C代码
降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...
- java mp3静音检测,音频自动增益 与 静音检测 算法 附完整C代码
前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...
- 基于傅里叶变换的音频重采样算法 (附完整c代码)
前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...
- 音频自动增益 与 静音检测 算法 附完整C代码
前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...
- 自动曝光修复算法附完整C代码
众所周知, 图像方面的3A算法有: AF自动对焦(Automatic Focus) 自动对焦即调节摄像头焦距自动得到清晰的图像的过程 AE自动曝光(Automatic Exposure) 自动曝光的是 ...
- 基于rnn的语音降噪matlab,基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可惜的是作者没有提供数据训练集. 不过基本可以断定他采用的数据集里,肯定有ur ...
最新文章
- fatal error LNK1169: 找到一个或多个多重定义的符号
- 全球500强案例精选,带你了解人工智能在金融行业如何落地
- Redis Cluster 原理你了解不?
- 高性能IO -Reactor模式的实现
- static_cast函数
- 基于JSON Web Tokens的单点登录(SSO)或通行证(Passport)系统方案
- Linux 复习重点目录
- MFC实现mysql备份_MySQL如何自动备份 - MySQL - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
- java虚拟机内存告警_java虚拟机内存溢出各种场景总结
- 软件测试经典面试题(二)给你一个网站如何测试
- qt 限制一段时间内对button只能点按一次_299元入手拓牛智能垃圾桶,用第一次想退货,第三天我上瘾了...
- 第k小元素——分治法
- 计算机软件专业代码表,2019-04-09 计算机软件适用的国民经济行业代码表
- python123汉诺塔实践_python汉诺塔问题
- SCTP协议与程序设计案例
- Pigeon中的流量限制
- 原相机怎么设置水印_原来手机拍照也可以添加文字、水印、超实用,我怎么没有早点发现...
- 学习资料怎么打印,能用手机直接打印学习资料
- 报表工具使用教程-FineReport决策报表导出Plus
- python计算bmi的编程_Python学习-计算BMI的小程序