JavaScript冒泡排序

冒泡排序的原理

比方说有五个数字54321,要按从小到大排列,首先比较前两个,就是5和4,如

果第一个小于第二个,不操作,如果第一个大于第二个,那么交换两者的位置,即

变成45321,然后比较第二个和第三个,同理变成43521,然后第三个和第四个,

第四个和第五个,这样一次循环下来,变成43215

第一个for,应该指的是这个数组所拥有的元素个数-1,因为如果只有一个数的话,

就不需要比较,如果有两数的话,就需要比较1趟,有三个数的话,需要比较2趟,

所以第一个for的次数就是元素个数num.length-1。

第二个for,可以理解为第i趟时,只需要对剩余的num.length-i的元素进行排序。

比如一个数组有3个数时,第一趟,只需要比较2次,第二趟,只需要比较1次,

所以是num.length-i。

代码如下:

<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <title></title>
        </head>
        <body>
                <script type="text/javascript">
                        var num = [2, 82, 67, -34, 0, 65, 12]

                        function print(arr) {
                                for (var i = 0; i <= num.length -1; i++) { //外层控制轮数
                                        for (var j = 0; j < num.length - 1 -i; j++) { //内层循环  控制比较的次数
                                                if (num[j] > num[j + 1]) {
                                                        var temp = num[j] //定义一个变量,将两个数最大的值赋值给temp
                                                        num[j] = num[j+1]
                                                        num[j+1] =temp
                                                }
                                        }
                                }
                                document.write(num)
                        }
                        print()
                </script>
        </body>
</html>