最通俗易懂的冒泡排序原理
冒泡排序:
排序:指数据从小到大排列或者从大到小排列
数组中的排序:指的是将数组元素进行从小到大排列或者从大到小排列
冒泡排序算法简介:
- 比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
- 每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为最大或
最小的数. - 针对除了最后一个元素重复进行上面的步骤
- 重复1-3步骤直到完成排序
//第一步 思路 先进行第一组排序 依次比较 交换位置
//内层循环 控制次数
javascript<script>//冒泡排序的原理:比较数组相邻的两个数 如果第一个数比第二个数大或者小 就交换//1.定义一个数组let arr = [10, 3, 7, 24, 6, 81, 5];//2.遍历数组 从索引0开始 到数组最后一位结束(从里往外推)for (let j = 0; j < arr.length; j++) {//3.第一步比较数组相邻的两位 10和3//数组中相邻的两位数是 arr[i] 和 arr[i+1] if (arr[j] > arr[j + 1]) {//交换位置//1.声明临时变量let temp;//2.将arr[j]这个变量的值 赋值给temptemp = arr[j];//3.将arr[j+1]的值 赋值给arr[j]arr[j] = arr[j + 1];//4.将temp的值 赋值给 arr[j+1]arr[j + 1] = temp;}}console.log(arr);
//第二步 思路 给内层循环的外面 套一层循环 控制交换趟数
//(for循环外层控制行数 内层控制次数)
//外层循环走一次 内层循环走一圈
<script>let arr = [10, 3, 7, 24, 6, 81, 5]// 依次的比较相邻的元素 如果前一个比后一个要大则交换他们的位置// 1. 遍历数组// 2. 比较 ?// 3. 交换位置 交换两个变量的值for (let i = 0; i < arr.length; i++) {//外层循环走一次 内层循环走一圈//i=0时 内循环里面的元素位置交换第一次//i=1时 内循环里面的元素位置交换第一次for (let j = 0; j < arr.length; j++) {if (arr[j] > arr[j + 1]) {// 1. 声明一个临时变量let temp// 2. 将 arr[j]这个变量 的值赋值为 temptemp = arr[j]// 3. 将 arr[j + 1]的值赋值为 arr[j]arr[j] = arr[j + 1]// 4. 将 temp 的值 赋值为 arr[j+1]arr[j + 1] = temp}}}console.log(arr)
//第三步 思路 优化
**外层循环 :**七个数字 只需要交换6趟 arr.length-1.
**里层循环(同理) :**七个数字 只需要交换6趟 arr.length-1
外层:i 表示趟数
里层:j表示次数
第1趟的时候,我们需要比较6次 就能将最大值放到数组的最后面
i = 0 表示第一趟 比较(j<7-1-0)6次
第2趟的时候,我们需要比较5次 就能将最大值放到数组的最后面
i = 1 表示第二趟 比较(j<7-1-1)5次
第3趟的时候,我们需要比较5次 就能将最大值放到数组的最后面
i = 2 表示第三趟 比较(j<7-1-2)4次
第i趟的时候,我们需要比较j次
结论:外层循环每交换一趟 内层循环次数每次都要在原有的基础上少一次 j < arr.length - 1 - i
//冒泡排序优化后的代码实现:
<script>//1.定义一个数组let arr = [10, 3, 7, 24, 6, 81, 5];//需要比较多少次 数组长度为7,需要比较6次 比到第六次就可以确定最后的数为最大值 arr.length-1次;//外层循环 :七个数字 只需要交换6趟 arr.length-1.//里层循环(同理) :七个数字 只需要交换6趟 arr.length-1for (let i = 0; i < arr.length - 1; i++) {// 1. 里面的循环的// 第1趟的时候 我们需要比较 6次就能将 最大放到数组的最后面 i = 0 表示第一趟 j < 7 - 1 - 0// 第2趟的时候 我们需要比较 5次就能将 最大放到数组的最后面 i = 1 表示第二趟 j < 7 - 1 - 1// 第3趟的时候 我们需要比较 4次就能将 最大放到数组的最后面 i = 2 表示第三趟 j < 7 - 1 - 2// 第4趟的时候 我们需要比较 3次就能将 最大放到数组的最后面 i = 3 表示第四趟 j < 7 - 1 - 3for (let j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 1. 声明一个临时变量let temp// 2. 将 arr[j]这个变量 的值赋值为 temptemp = arr[j]// 3. 将 arr[j + 1]的值赋值为 arr[j]arr[j] = arr[j + 1]// 4. 将 temp 的值 赋值为 arr[j+1]arr[j + 1] = temp}}}console.log(arr) </script>
最通俗易懂的冒泡排序原理相关推荐
- 排序算法(一)——冒泡排序原理及Java实现
冒泡排序原理:我觉得类似于拍集体照的时候老师指挥按大小个排队 依次比较两个相邻的数组元素.满足交换条件就交换二者位置,不满足就继续向下比较. 冒泡排序原理动态图(摘自网络) Demo代码 //冒泡排序 ...
- C#冒泡排序原理讲解及代码块
C#冒泡排序原理讲解及代码块 一.冒泡排序理论 (1)基本概念由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序.冒泡排序的时间复杂度为O(n*n). (2)逻辑分析依次比 ...
- JavaScript 冒泡排序原理
冒泡排序原理 升序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元 ...
- Java冒泡排序原理速记,选择排序原理速记
Java冒泡排序原理速记,选择排序原理速记 冒泡排序原理分析: 冒泡排序从左往右两两比较:保护右边的排序好的元素(比较直接交换元素). 选择排序原理: 选择排序从左往右依次比较:保护左边排序好的元素( ...
- go语言 冒泡排序原理
一.概述 go语言中的冒泡排序和java中的冒泡排序的原理一样,如果你懂得java的冒泡排序,那么go只是换了一种写法而已.冒泡,简而言之,就是相邻的两个数据进行比较,进行移位,向冒泡一样.例如一个集 ...
- 冒泡排序原理详解及代码实现
1.冒泡排序数组排序常用的一种方式,为什么要叫冒泡排序呢?这还要从它的原理说起. 2.代码实现(低效版) 3.原理详解:冒泡排序最基本的思想就是从左到右依次判断相邻的两个数的大小关系,如果前面的数大于 ...
- python冒泡排序原理_python冒泡排序详解
要学习冒泡排序必须知道它的原理: 冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该 ...
- 数组--冒泡排序原理
1 原理 原理:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序不符合要求就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换. 2 冒泡排序图解 第一次循环:第一个元素和第二个 ...
- java冒泡排序原理?
冒泡排序也是排序算法中的一种,他的排序方式是把下标相邻的两个数进行比较,从小到大排序,下标相邻的两个数,如果后面的数小于前面的数,就进行交换,大于则不交换,继续比较下一组数据,直到比完最后一组数据,这 ...
最新文章
- keras ImageDataGenerator 用法
- Android在桌面上添加开关,多键开关 Andromax v1.1.7
- Python中函数的参数传递方式
- 转:CMake 使用方法
- Elasticsearch(一)架构及一般性应用
- 9.1定时器 小时分秒
- lettuce 配置域名 dns 切换
- 迈普路由器访问控制列表配置命令_如何选购企业路由器?选购企业路由器需注意什么...
- java 1.8.0 安全_RedHat安全更新修复OpenJDK1.8.0版本漏洞
- 【Elasticsearch】 6 种 能使 es 挂掉的方法
- js中子父级页面相互调用
- Linux tar 打包
- 并联串联混合的电压和电流_16.2 串、并联电路中电压的规律
- sql函数—Lpad、Rpad
- 虚拟机中Linux扩容硬盘空间
- 安卓版本与adb的问题
- 【HBuilderX】预编译器错误:代码使用了scss/sass语言,但未安装相应的编译器插件,请前往插件市场安装该插件:
- 安装两个虚拟机只为验证一个猜测,结果不出所料(Unity | deviceUniqueIdentifier | 设备ID相同)
- Windows IIS IUSR IWAM 帐户密码同步
- JAVA与C语言的区别之我见