vlambda博客
学习文章列表

web前端练习|通过JavaScript语法实现冒泡排序案例

冒泡排序(Bubble Sort),可以说是一个很基础、很经典的算法案例,可以通过简单的算法实现一组数字从大到小或者从小到大排序。


冒泡排序:


它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。


这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(引自百度百科)



实现原理:


  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 

  3. 针对所有的元素重复以上的步骤,除了最后一个。  

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。



使用JavaScript语法实现:



第一步:


首先我们声明一个数组,并赋值 1~11的数字排列。



let
arr = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

// 如 11大于10 

let arr = [10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1];



根据算法原理,需要让第一个数字和剩余数字进行对比,直到前面的数字比它小,前面的数字比它大为止,从上面我们可以看到10个数字完成所有排序对比,共需要9轮对比,如果是8个数字则需要进行7轮对比,以此类推,我们可以得出需要 arr.length - 1 次对比,此时我们可以通过 for 循环语句进行实现上述操作



let arr = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

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

    //通过 for 循环实现对比

}




第二步:


接下来我们根据上思路进行排序,第一轮进行9次对比后实现如下所示排列:


let arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 11];



接下来,继续让第一个数字(10)和后面的数字以此进行对比,经过8次对比后实现如下所示排列:



let arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 11];



……


以此类推,如果实现从小到大的排序,第一轮需要9次对比、第二轮需要8次对比、第三轮需要7次对比,因为数组的索引号是从0开始,所以我们次数也是从0开始,每一轮对比的次数可以记为 arr.length - 1 次。


完成上述对比,我们需要用到双重 for 循环语句,即得出以下语句:



let arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 11];

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


       }
}

}




第三步:


接下来,我们只需要将每次对比的后的数字进行替换即可,例如第一个数字大于第二个数字,则将它们的位置进行替换,此时我们先声明一个空值变量 let temp; ,将 arr[j] 的值赋予事先声明的空变量,接着将 arr[j+1] 的值赋予 arr[j] ,最后取回 temp 的值赋予 arr[j+1] ,便完成了数字的对比并交换位置,再通过上述的循环实现依次对比排序。



let arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 11];

for (let i = 0; i <= arr.length - 1; i++) {
for (let j = 0; j <= arr.length - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
let temp = arr[j];
           arr[j] = arr[j + 1];
           arr[j + 1] = temp;
       }
}
}

console.log(arr);



最后我们通过打印数组 arr 便可以看到数组内的数字按照从小到大的顺序依次排列:


冒泡排序


从小到大


如果需要实现从大到小排序,只需要将条件语句更改为 arr[j] < arr[j=1] 即可。



(arr[j] < arr[j + 1])



冒泡排序


从大到小


以上就是通过 JavaScript 语法实现冒泡排序的过程和思路,除了冒泡排序,还有诸如使用双重 for 循环打印用乘法口诀表等案例,综合下来,只要分析对代码执行逻辑,语法实现起来就很会容易的多



- END -