美文网首页故事
JavaScript 冒泡排序的个人理解

JavaScript 冒泡排序的个人理解

作者: 锋叔 | 来源:发表于2019-03-01 11:29 被阅读11次

做了三四年前端了,为了自己的事情在学java,昨晚上突然卡壳在了冒泡排序上,觉得无法理解了。看来这几年做久了api调用工程师,基础算是全部忘了,每个语言的冒泡排序都是一个原理!!看了很多帖子,越看越糊涂了!哎!还是自己来理解吧。如果谁觉得不对希望帮我指点下。

排序前理解互换

var a = 10, b = 20, temp;
temp = a;
a = b;
b = temp;
console.log(a)
console.log(b)
// 20
// 10

数组从小到大的排序

var array = [90, 0, 1, -9, 10]
for (var i = 0; i < array.length; i++) {
    console.log("外循环第" + (i+1) + "次")
    for (var j = 0; j < array.length; j++) {
        console.log("内循环第" + (j+1) + "次")
        console.log("array[i]值 = " + array[i])
        console.log("array[j]值 = " + array[j])
        var flag = array[i] < array[j]
        console.log("对比后结果 = " + flag)
        if(array[i] < array[j]) {
            var temp = array[i]
            array[i] = array[j]
            array[j] = temp
            console.log("array[i]交换后值 = " + array[i])
            console.log("i="+i+",j="+j+",数组="+array)
        }
    }
}
console.log("排序完成的数组:"+array)
外循环第1次,array[i] = 90
 内循环第1次
 array[i]值 = 90
 array[j]值 = 90
 对比后结果 = false
 内循环第2次
 array[i]值 = 90
 array[j]值 = 0
 对比后结果 = false
 内循环第3次
 array[i]值 = 90
 array[j]值 = 1
 对比后结果 = false
 内循环第4次
 array[i]值 = 90
 array[j]值 = -9
 对比后结果 = false
 内循环第5次
 array[i]值 = 90
 array[j]值 = 10
 对比后结果 = false

解释:条件全部为false,所以数组不会发生任何改变。还是[90, 0, 1, -9, 10]

外循环第2次, i = 1; array[i] =0;array = ``[90, 0, 1, -9, 10]```
 内循环第1次
 array[i]值 = 0
 array[j]值 = 90
 对比后结果 = true
 array[i]交换后值 = 90 
***这里很关键,很关键:
***交换后的值变成了array[j]的值,也就是90,当继续内循环的时候,你记住了
***array[i]已经不是0,而是90了。
 i=1,j=0,数组=0,90,1,-9,10
 内循环第2次
 array[i]值 = 90 // 是对比的90不是0了哦。
 array[j]值 = 90
 对比后结果 = false
 内循环第3次
 array[i]值 = 90
 array[j]值 = 1
 对比后结果 = false
 内循环第4次
 array[i]值 = 90
 array[j]值 = -9
 对比后结果 = false
 内循环第5次
 array[i]值 = 90
 array[j]值 = 10
 对比后结果 = false

解释:仔细理解我备注的很关键很关键部分。经过第二轮后数组现在是[0,90,1,-9,10]
最关键最关键最关键的理解来了,
循环时数组改变了那么就算循环没执行完,他会认改变后的数组而不会认原始形态的数组。

循环中改变了数组会影响获取值

var arr = [1,2,3,4,5] // 原始数组
for (var i = 0; i < arr.length-1; i++) {
  arr[i+1] = arr[i] // 我们循环改变了数组后面一个值
  console.log(arr[i]) // 如果原始数组不会改变那么应该是打印1,2,3,4
}
// 实际打印结果
//1,1,1,1
外循环第3次, i = 2; array[i] =1;array = ``[0,90,1,-9,10]```
 内循环第1次
 array[i]值 = 1
 array[j]值 = 0 // 所以此时此刻j = 0 ,array[j] = 0
 对比后结果 = false
 内循环第2次
 array[i]值 = 1
 array[j]值 = 90
 对比后结果 = true
 array[i]交换后值 = 90
 i=2,j=1,数组=0,1,90,-9,10
 内循环第3次
 array[i]值 = 90
 array[j]值 = 90
 对比后结果 = false
 内循环第4次
 array[i]值 = 90
 array[j]值 = -9
 对比后结果 = false
 内循环第5次
 array[i]值 = 90
 array[j]值 = 10
 对比后结果 = false

解释:最难理解的还是为true的时候,array[i] = 90 了。所以继续内循环的时候又都变成了false。##### 外循环第3次,array[i] = 1

外循环第4次,i = 3; array[i] = -9;array = [0, 1, 90, -9, 10]
 内循环第1次
 array[i]值 = -9
 array[j]值 = 0
 对比后结果 = true
 array[i]交换后值 = 0
 i=3,j=0,数组=-9,1,90,0,10
 内循环第2次
 array[i]值 = 0
 array[j]值 = 1
 对比后结果 = true
 array[i]交换后值 = 1
 i=3,j=1,数组=-9,0,90,1,10
 内循环第3次
 array[i]值 = 1
 array[j]值 = 90
 对比后结果 = true
 array[i]交换后值 = 90
 i=3,j=2,数组=-9,0,1,90,10
 内循环第4次
 array[i]值 = 90
 array[j]值 = 90
 对比后结果 = false
 内循环第5次
 array[i]值 = 90
 array[j]值 = 10
 对比后结果 = false

解释:对比上面的条件为true的理解应该不难了吧!

外循环第5次,i = 4;array[i] = 10;array = [-9, 0, 1,90, 10]
 内循环第1次
 array[i]值 = 10
 array[j]值 = -9
 对比后结果 = false
 内循环第2次
 array[i]值 = 10
 array[j]值 = 0
 对比后结果 = false
 内循环第3次
 array[i]值 = 10
 array[j]值 = 1
 对比后结果 = false
 内循环第4次
 array[i]值 = 10
 array[j]值 = 90
 对比后结果 = true
 array[i]交换后值 = 90
 i=4,j=3,数组=-9,0,1,10,90
 内循环第5次
 array[i]值 = 90
 array[j]值 = 90
 对比后结果 = false

排序到此完成

最终数组: [-9,0,1,10,90 ]

很凝重的表情,你们理解了吗!!!

相关文章

  • JavaScript 冒泡排序的个人理解

    做了三四年前端了,为了自己的事情在学java,昨晚上突然卡壳在了冒泡排序上,觉得无法理解了。看来这几年做久了api...

  • 2019-08-11

    Javascript中常用几种基础算法 1 排序-冒泡排序 //冒泡排序 function bubbleSort...

  • 前端er常用的几种排序方法

    前端常用的排序方法有:冒泡排序,选择排序,快速排序,插入排序 一、冒泡排序 理解冒泡排序 相邻的两个元素依次比较,...

  • 冒泡排序与选择排序

    冒泡排序 冒泡排序原理:比较相邻的元素,较小的放到前面,较大的放到后面 要理解冒泡排序首先要理解两个元素互换 例如...

  • JavaScript 中的算法

    JavaScript 中的算法 Sort 以下例子全部以正序为标准 bubbleSort 冒泡排序 冒泡排序算法的...

  • Java冒泡排序,快速排序理解与实现

    经典排序算法中,有好几种排序,下边说下冒泡排序和快速排序的理解与实现,记太多容易混乱; 1.冒泡排序:字面理解,值...

  • 必须掌握算法:冒泡、选择、插入排序算法

    目录 1、冒泡排序 2、选择排序 3、插入排序 4、总结 1、冒泡排序 这个名词的由来很好理解,一般河水中的冒泡,...

  • php之排序-------冒泡排序的优化

    本文需要在理解冒泡排序的基础之上 排序是算法入门的基础操作,冒泡排序很经典。下面这个改进后的冒泡排序,使循环的次数...

  • JS实现排序算法

    原文:常见排序算法之JavaScript实现 - 知乎 目录 冒泡排序 选择排序 插入排序 合并排序 快速排序 1...

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

网友评论

    本文标题:JavaScript 冒泡排序的个人理解

    本文链接:https://www.haomeiwen.com/subject/xrgruqtx.html