冒泡排序原理+冒泡排序代码详解
本文参考动图来自公众号:吴师兄学算法。看动图,学算法,认准吴师兄~
冒泡算法方法原理
冒泡排序是一种简单的排序算法,它也是一种稳定排序算法(一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。)其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换(这个过程我们成为比较的次数)。一直重复这个过程(我们称之为比较的轮数),直到没有任何两个相邻元素可以交换,就表明完成了排序。算法过程如下图所示:
由于该排序算法的每一轮要遍历所有元素,轮转的次数和元素数量相当,所以时间复杂度是O(N^2)
冒泡算法代码实现
public class DemoTest {public static void main(String[] args) {//定义一个数组int[] arr = {20, 34, 14, 75, 26, 72, 61};System.out.println("排序前:" + Arrays.toString(arr));/* 为什么是arr.lenth-1? 因为如果是arr.length会导致“数组下标越界”错误。* 冒泡算法每次比较的时候,都和下一个元素进行比较,* 到arr.length-1那个元素的时候,就会和arr.length那个元素比较,* 因此i只需要到arr.length-1就可以了*/for (int i = 0; i < arr.length-1; i++) {/* 内层循环是每轮比较次数* 为什么是arr.lenth-1-i? * 为什么-1:因为如果是arr.length会导致“数组下标越界”错误。* 冒泡算法每次比较的时候,都和下一个元素进行比较,* 到arr.length-1那个元素的时候,就会和arr.length那个元素比较,* 因此i只需要到arr.length-1就可以了;* 为什么-i:因为第一轮比较(此时i=0)我们需要比较arr.length-1次,* 第二轮比较的时候(此时i=1),我们已经比完一个元素了,剩下需要比较的次数应该减掉这个已经比完的也就是arr.length-1-1;* 第三轮比较的适合(此时i=2),我们已经比完两个元素了,剩下需要比较的次数应该减掉这两个已经比完的也就是arr.length-1-2;* 找规律可知,需要比较的次数应该是:arr.length-1-i;* */for (int j = 0; j < arr.length-1-i; j++) {if (arr[j] > arr[j+1]){int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}System.out.println("排序后:" + Arrays.toString(arr));}
}
冒泡排序原理+冒泡排序代码详解相关推荐
- DeepLearning tutorial(1)Softmax回归原理简介+代码详解
FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...
- DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...
- Pytorch|YOWO原理及代码详解(二)
Pytorch|YOWO原理及代码详解(二) 本博客上接,Pytorch|YOWO原理及代码详解(一),阅前可看. 1.正式训练 if opt.evaluate:logging('evaluating ...
- batchnorm原理及代码详解
转载自:http://www.ishenping.com/ArtInfo/156473.html batchnorm原理及代码详解 原博文 原微信推文 见到原作者的这篇微信小文整理得很详尽.故在csd ...
- 人脸识别SeetaFace2原理与代码详解
人脸识别SeetaFace2原理与代码详解 前言 一.人脸识别步骤 二.SeetaFace2基本介绍 三.seetaFace2人脸注册.识别代码详解 3.1 人脸注册 3.1.1 人脸检测 3.1.2 ...
- Pytorch | yolov3原理及代码详解(二)
阅前可看: Pytorch | yolov3原理及代码详解(一) https://blog.csdn.net/qq_24739717/article/details/92399359 分析代码: ht ...
- 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解
KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...
- Pytorch | yolov3原理及代码详解(一)
YOLO相关原理 : https://blog.csdn.net/leviopku/article/details/82660381 https://www.jianshu.com/p/d13ae10 ...
- 深入浅出吃透多线程、线程池核心原理及代码详解
一.多线程详解 1.什么是线程 线程是一个操作系统概念.操作系统负责这个线程的创建.挂起.运行.阻塞和终结操作.而操作系统创建线程.切换线程状态.终结线程都要进行CPU调度--这是一个耗费时间和系统资 ...
最新文章
- cloudemanager安装时出现ProtocolError: ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized问题解决方法(图文详解)...
- python语言变量命名规则有什-以下选项中,符合Python语言变量命名规则的是_学小易找答案...
- 如何添加java环境变量_如何配置java环境变量
- 弹性盒模型--新版与旧版比较(1)
- Android开发学习笔记(10):NDK安装手顺及应用
- 关于java结构中描述正确的是_下列关于Java中类的构造方法的描述,正确的是()...
- VirtualBox桥接网络的简单配置,让虚拟机直接访问网络
- MVC.NET 出现诡异的 “IIS运行停止”
- 美国公司报告称2020年中国会非常穷 我学者驳斥[转]
- Linux基础之tr与重定向管道
- 遗传算法解决TSP问题
- Mybatis拦截器
- 编译原理c语言递归下降程序,编译原理(递归下降分析程序)
- android x86 5.1 .iso,凤凰OS5.1通用ISO1.5.0
- 《A Neural Layered Model for Nested Named Entity Recognition》
- pyecharts绘制K线
- Unable to establish SSL connection.
- java钢铁之心,洛克人 Dash 2 EPISODE 2(第二部) - 巨大的遗产[日]下载
- html5 多点触控 缩放,WebBrowser禁用触摸缩放
- 【搬运】黑苹果台式机机型选择指导 By 黑果小兵
热门文章
- 实现qq空间自动化点赞
- 中华人民共和国行政区划(五级):省级、地级、县级、乡级和村级。
- Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年
- STL 格式解析--文本以及二进制格式
- HBase数据库结构、存储理解(举例解释、容易理解、深入浅出)
- android 登录界面 布局,Android基本布局和登录界面的设计
- Itunes降级(卸载+安装)+苹果软件降级安装(爱思+ITunes)
- 安装教程之postman下载及安装
- 机器视觉运动控制一体机应用|工件同心度检测
- 如何将卫星影像(高程)导出为西安80、北京54、国家2000坐标系