冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

首要,让咱们来看这张图片可能大家伙看完后有一部分小伙伴就懵了。

冒泡排序(保姆级教学)

冒泡排序(保姆级教学)修改

这是啥啊???

我知道你很急但你先别急,且听我娓娓道来ヾ(o◕∀◕)ノヾ

让咱们从下到上来看这张图,目光锁定在始初这一列上。这一列的意思便是:现在我这儿有一组数据(1,5,2,8,6,4,3,9,7)咱们把这些数放在一同(一个集合里边)就叫做数组。那现在这个数组里边的数据是没有巨细顺序的,咱们要想把这组数据变得有序,那就得依靠巨细比较了。

冒泡排序(保姆级教学)

冒泡排序(保姆级教学)修改

首要咱们拿出一个最初的数字“1”,把“1”与跟他相邻的“5”作比较。得出“1”比“5”小,那咱们就把“1”与“5”交流方位;当“1”换了方位后,再将“1”与它相邻的“2”做比较,假如“1”比“2”小,那咱们就把“1”与“2”交流方位;当“1”换了方位后,再将“1”与它相邻的“8”做比较,假如“1”比“8”小,那咱们就把“1”与“8”交流方位……….以此类推。“1”将会被换到这个数组的最终边。(经过计数君的发现居然让“1”与其他的数进行了8次比较)

那现在数组的最初也就变成了以“5”最初“1”结束(5,2,8,6,4,3,9,7,1)。接下来就该上演帽子戏法了!!!

冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

将数组最初的“5”与“2”进行比较,居然发现“5”比“2”大 (⊙▽⊙”a(总不能把大的数换到前面去吧) 这样咱们该怎么换位呢?我的主张是:直接抛弃“5”,用第二个数“2”与“8”进行比较(已然“5”动不了,那就只能动“2”了)那这样就好啦,经过与后边数字一系列的比较“2”来到了“1”的屁股后边。这时“2”可以不与“1”进行比较,因为它们现已比较过一次了。(这次经过计数君的发现这一轮总共比较了7次)

冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

聪明的你是否现已发现咱们将一切的数字按巨细顺序排列好总共经过了八轮改变,第一次改变咱们进行了八次比较 ,第2次改变咱们进行了七次比较……..以此类推。咱们就发现了一个惊人的秘密:冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当时的轮数。

下面直接上代码

冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

var arr = [1, 5, 2, 8, 6, 4, 3, 9, 7];                //定义一个名为arr的数组
for(var i = 0; i < arr.length - 1; i++){              //操控需要比较的轮数
       for(var j = 0; j < arr.length - 1 - i; j++) {      //操控每轮需要参加比较的元素
           if (arr[j] > arr[j + 1]) {                 //比较相邻的两个元素
               var temp  = arr[j];        //将第一个元素赋值给一个空元素(此刻第一个元素就为空)
               arr[j] = arr[j + 1];       //将第二个元素赋给第一个元素(此刻第二个元素就为空)
               arr[j + 1] = temp;         //将temp元素(也便是装着第一个元素)赋给第二个元素
           }
       }
   }
console.log(arr);    //输出成果为:1, 2, 3, 4, 5, 6, 7, 8, 9

冒泡排序(保姆级教学)

冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

什么???你居然还是看不懂?那就为你解释一下吧:

var arr = [1, 5, 2, 8, 6, 4, 3, 9, 7];

这段代码表明咱们创建了一个名叫arr的数组,但里边的元素都是乱序的

for(var i = 0; i < arr.length – 1; i++) {

//代码体

//代码体

}

这个for循环是操控比较的轮数,由上文的定论咱们可以得知:比较的轮数是数组长度减1,所以咱们设置for循环的次数为数组长度(length)然后减1,(这儿的i别离可认为0, 1, 2,3, 4, 5, 6, 7 总共八次)

for(var j = 0; j < arr.length -1 -i; j++) {

//代码体

//代码体

}

这个被嵌套在上一个for循环中的循环是用来操控参加比较的对数。var j = 0表明从第一个数开始,由上文可知每轮比较的对数等于数组的长度减当时的轮数 ,所以第一轮比较的对数应为arr.length – 1,第二轮比较的对数应该为arr.length – 2,………以此类推,最终为arr.length – 8。但但但问题来了咱们进行第一次循环的时候i = 0 ;那就意味着第一轮就变为了arr.length – 0 。所认为了让它变回正常的arr.length – 1咱们就要在最终边多减去一个1。最终整理可得j < arr.length – 1 – i(arr.length表明名叫arr这个数组的长度,有几个数length就为几)

if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}

最终这段写在两层for循环中的if语句整体的意思便是在比较两个数的巨细并把它们交流方位。假如你看懂上面的代码,那首要你得明白一个例子:当你有一瓶玻璃瓶装的豆奶跟一瓶易拉罐装的可乐,你觉得用易拉罐喝可乐不爽!!!你想用玻璃瓶喝可乐怎么办???首要咱们是不是要找一个空杯子,把可乐倒入空杯子再把豆奶倒入易拉罐里最终把可乐倒入玻璃瓶中。这样咱们就完成了交流,此刻玻璃瓶里装是可乐,易拉罐里装的是豆奶。这题也是相同的意思:用if语句进行比较假如arr[j]>arr[j+1]那么咱们就要新建一个变量var temp(空杯子) = arrj,再将arr[j + 1]赋值给arr[j](这时arr[j]里边就变为了arr[j + 1]的值)最终将temp的值(也便是最开始arr[j]的值)赋给arr[j + 1]这样就完成了这两个值方位的交流。if比较的原理便是让数组里边的数第1个方位里边的数与第2个方位里边的数比,第2个方位里边的数与第3个方位里边的数比,第3个方位里边数与第4个方位比…….以此类推。假如遇到了两个方位,比方第1个方位的数比第2个方位的数大就交流两个数的方位,再让第2个方位的数与第3个方位的数比,假如第2个方位的数大则第2个方位的数与第3个方位交流数据………..以此类推,假如第1个方位的数比第2个方位的数小则进行下一次比较但比较的方式不会变:接着就变为了第2个方位里边的数与第3个方位里边的数相比…….以此类推最终较大的数会被排在后边,较小的数就在前面。

冒泡排序(保姆级教学)
冒泡排序(保姆级教学)​修改

敲了好久终于敲完了,看都看到这儿了能不能留下一个免费的赞呢?n(≧▽≦)n