冒泡排序的优化和js跳出循环的方法

1.冒泡排序

1).今天下班时间看了《美团面试,我竟然输给了冒泡排序……》这篇博客,博主写的很666~~。

先说说冒泡排序,相信每个程序员都烂熟于心,所以直接放上代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div>冒泡排序和js跳出循环的方法</div>
    <script type="text/javascript">
        var arr = [8,9,3,4,6,7,8,2,1]
        var plan_arr
        // 冒泡排序
        for (let x = 0; x < arr.length; x++) {
            for (let y = 0; y < arr.length; y++) {
                if(arr[y] > arr[y + 1]){
                    plan_arr = arr[y]
                    arr[y] = arr[y + 1]
                    arr[y + 1] = plan_arr
                }
            }
        }
        console.log(arr)   //输出[1, 2, 3, 4, 6, 7, 8, 8, 9]
    </script>
</body>
</html>

2).重点来了,冒泡排序的优化  ,其实一点也不难,只是实战中用不到冒泡排序 ,可能面试问到很懵

原理:当有一趟完整的比较中没有发生换位,那是不是就已经排好?而不需要继续比较。想通这一点相信已经明白了。

比如:8,7,1,2,3,4,5           那我们看优化的代码:

首先我们看这个数组在没有优化(注释了)是的代码和输出:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div>冒泡排序和js跳出循环的方法</div>
    <script type="text/javascript">

        function bubbling(){
            var arr = [8,7,1,2,3,4,5]
            var plan_arr
            // var step_out
            var num = 0
            // 冒泡排序
            for (let x = 0; x < arr.length; x++) {
                // step_out = false
                for (let y = 0; y < arr.length; y++) {
                    num++
                    if(arr[y] > arr[y + 1]){
                        plan_arr = arr[y]
                        arr[y] = arr[y + 1]
                        arr[y + 1] = plan_arr
                        // step_out = true
                    }
                }
                console.log(num)
                console.log(arr) 
                // if(!step_out){
                //     return
                // }
            }
        }
        bubbling()
    </script>
</body>
</html>

打印输出结果是:

我们在看放开上文中的注释加优化的后的代码和输出:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div>冒泡排序和js跳出循环的方法</div>
    <script type="text/javascript">

        function bubbling(){
            var arr = [8,7,1,2,3,4,5]
            var plan_arr
            var step_out
            var num = 0
            // 冒泡排序
            for (let x = 0; x < arr.length; x++) {
                step_out = false
                for (let y = 0; y < arr.length; y++) {
                    num++
                    if(arr[y] > arr[y + 1]){
                        plan_arr = arr[y]
                        arr[y] = arr[y + 1]
                        arr[y + 1] = plan_arr
                        step_out = true
                    }
                }
                console.log(num)
                console.log(arr) 
                if(!step_out){
                    return
                }
            }
        }
        bubbling()
    </script>
</body>
</html>

输出结果:

到此我们应该很容易看出效果,数组元素越多效果可想而知。

在说代码中用到的return 和加的函数,从而引出js循环中跳出循环的方法(break,continue,return)以及区别。

2.js循环中跳出循环的方法(break,continue,return)以及区别

1) break   简单理解就是直接跳出循环

break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句。

break在循环或switch中用否则会报错

2) continue  简单理解跳出本次循环进入下次循环

continue语句和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代。

continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内否则会报错

3) return  直接跳出函数并指定返回值

return语句就是用于指定函数返回的值。return语句只能出现在函数体内否则会报错

retrun面熟  好像在哪儿见过!注意的是用在函数之外会报错(Uncaught SyntaxError: Illegal return statement)!如下:

而return 还有一个常用的方法就是阻止表单提交:

 <form id="form" onSubmit="return false">
      <!-- 表单内容 -->
 </form>

代码解释上述三种方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div>js循环中跳出循环的方法发</div>
    <div>三种方法:<mark>break、continue、return</mark></div>
    <script type="text/javascript">
        var array = [9,8,7,6,5,4,3,2,1]
        // break
        document.write('break:')   
        for (let i = 0; i < array.length; i++) {
            if(array[i] == 3){
                break
            }
            document.write(array[i])   //输出:987654 
        }
        document.write('<br/>')

        // continue
        document.write('continue:')
        for (let i = 0; i < array.length; i++) {
            if(array[i] == 3){
                continue
            }
            document.write(array[i])   //输出: 98765421 
        }
        document.write('<br/>')

        // return
        function fun(){
            document.write('return:')
            for (let i = 0; i < array.length; i++) {
                if(array[i] == 3){
                    return
                }
                document.write(array[i])   //输出:987654 
            }
        }
        fun()
    </script>
</body>
</html>

三种方法的输出结果为:

 

参考博主文章:https://blog.csdn.net/fxss5201/article/details/52980138

参考博主文章:https://blog.csdn.net/csdnsevenn/article/details/84452866

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值