冒泡排序的自我理解(超详细)

news/2024/7/19 13:46:56 标签: 算法, 数据结构, js, javascript
javascript">        var arr = [3, 4, 5, 2, 1];
        for (var i = 1; i <= arr.length - 1;i++){
            for(var j=0;j<=arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    var temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

1.进入第一次外循环,此时i=1,则内层循环条件为j<=3(此时数组为[3,4,5,2,1])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>4,不成立,跳出if
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断4>5,不成立,跳出if
(进入第三次内循环)
③.当j=2时,判断arr[2]>arr[3],即判断5>2,成立,使用temp临时变量,将arr[2]和arr[3]的值互换,此时数组发生变化为[3,4,2,5,1]
(进入第四次内循环)
④.当j=3时,判断arr[3]>arr[4],即判断5>1,成立,使用temp临时变量,将arr[3]和arr[4]的值互换,此时数组发生变化为[3,4,2,1,5]

2.进入第二次外循环,此时i=2,则内循环条件为j<=2(此时数组为[3,4,2,1,5])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>4,不成立,跳出if
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断4>2,成立,使用temp临时变量,将arr[1]和arr[2]的值互换,此时数组发生变化为[3,2,4,1,5]
(进入第三次内循环)
③.当j=2时,判断arr[2]>arr[3],即判断4>1,成立,使用temp临时变量,将arr[2]和arr[3]的值互换,此时数组发生变化为[3,2,1,4,5]

3.进入第三次外循环,此时i=3,则内循环条件为j<=1(此时数组为[3,2,1,4,5])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>2,成立,使用temp临时变量,将arr[0]和arr[1]的值互换,此时数组发生变化为[2,3,1,4,5]
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断3>1,成立,使用temp临时变量,将arr[1]和arr[2]的值互换,此时数组发生变化为[2,1,3,4,5]

4.进入第四次外循环,此时i=4,则内循环条件为j<=1(此时数组为[2,1,3,4,5])
(进入第一次内循环,也只有一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断2>1,成立,使用temp临时变量,将arr[0]和arr[1]的值互换,此时数组发生变化为[1,2,3,4,5]

故最终将数组从小到大排序,反之从大到小排序是一个道理。(无论什么语言,算法结构基本是一样的)


http://www.niftyadmin.cn/n/854945.html

相关文章

webpack4对比webpack5

此版本重点关注以下内容: 通过持久缓存提高构建性能. 使用更好的算法和默认值来改善长期缓存. 通过更好的树摇和代码生成来改善捆绑包大小. 清除处于怪异状态的内部结构&#xff0c;同时在 v4 中实现功能而不引入任何重大更改. 下载 npm i webpack5 webpack-cli -D 自动…

作为一名前端所需要调整的电脑配置(可能会影响你的网页大写与测量精确度)

1.首先先调整电脑的显示配置&#xff0c;将示例文本和主显示器大写都调整为100% 2.再将浏览器的缩放调整为100%即可

sort的参数

Array的sort方法默认是将调用该方法的数组里面元素全都转换为字符串, 然后比较每一项对应utf-16对应的单元值大小排序的, 比如9会排在89前面 如果想要利用该方法将一个无序integer数组排序的话, 需要给它的参数中传一个回调函数, 该回调函数作为排序的依据 如果都是integer类…

调整示例文本大写和显示器大写而产生桌面图标重叠混乱(可能是win10的小bug)

首先创建一个txt文本文件&#xff0c;其次在里面写入以下代码&#xff1a; Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics] “IconSpacing”"-1125" “IconVerticalSpacing”"-1125" 然后将此文件已.…

广外女生远程控制2009beta3.50版本收藏

广外女生远程控制2009beta3.50版本收藏转载于:https://blog.51cto.com/646587275/289387

vue3_ref和reactive

vue3组件中可以没有根标签 <template><h2>{{ test }}</h2><button click"testfun">点击更改</button><h2>{{ count }}</h2><hr /><h2>age: {{ obj.age }}</h2><h2>other: {{ obj.other.age }}&l…

vue3和2响应式对比

vue2中, 数据响应式通过getter和setter来对对象的读取和写入劫持 并且对于对象是递归进行绑定的, 因此可以进行深层次的绑定 但是对于数组, 是通过重写数组方法对数组内数据劫持 Object.defineProperty(obj, count, {get(){},set () {}}) console.log(obj.count)vue3中, 数据响…

vue3_setup

参数 setup两个参数, 第一个参数是上面经过props声明过后的父组件传递过来的数据(需要经过props声明) 第二个参数context包含三个常用的属性 1. attr, 该属性里保存的是父组件传递过来但props中未声明的数据 2. emit, 即this.$emit, 可以触发父组件传递的函数 3. solt, 和插槽…