JS里面的冒泡排序

冒泡排序是一个很经典的循环嵌套逻辑.
定义数组arr=[5,4,3,2,1].
目标是将数组内的数组从小到大排序
着手之前先进行整体分析分析,
一.分析需要比较几次:
数组内一共有5个数字,第一次比较四次即可比完
经过第一次比较之后,最大的数字就将排在最后面,
因此第二次比较仅需要比较4个数字,也就是比较三次,
第三次需要比较3个数字,两次
第四次比较2个数字,一次即可,

每次循环后的结果如下:
1:: 4,3,2,1,5
2; 3,2,1,4,5
3; 2,1,3,4,5
4; 1,2,3,4,5
因此可以得出结论:外部大循环的次数由数组长度决定,定义i=0;i<4(数组的长度-1(5-1) 从0到3是4次循环);i++;
然后是内部的每次大循环中各个数字一次比较;
我们令每次循环之后的第一个数字和后面的数字依次比较;
可以定义j=0;j<数组的长度-i-1;j++;
因为每经过依次循环,所需要的比较的次数就少一次,
当第一次循环时,i=0,j从0开始每比较一次就自增.
i=0时需要比较 数组的长度(5)-i(0)-1=4次;和之前分析的一致;
i=1时需要比较5-1-1=3次;
逻辑就是这样,随着大循环的增加,每次参与比较的数字不断减少.
因为是由小到大排序,我们可以定义一个temp暂存数据,
当前者大于后者时,前者将数据存入temp;后者将数据存入前者;temp再将数据存入后者;就完成了数据交换;.
代码如下:
.if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp;

   //冒泡排序
        var arr = [5, 3, 4, 2, 1]
        var temp;
        // 总的循环次数(一共走了几个循环)i<arr.length-1
        for (var i = 0; i < arr.length - 1; i++) {
     
            // 每次循环比较了几次  每多走一个循环,需要比较的数就少一个.
            for (var j = 0; j < arr.length - i - 1; j++) {
     
                if (arr[j] > arr[j + 1]) {
     
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr);

你可能感兴趣的:(js,排序算法)