资讯专栏INFORMATION COLUMN

js手写系列-- 数组排序算法

YorkChen / 2437人阅读

摘要:冒泡排序原理第一轮第二轮第三轮第四轮第五轮实现排序,升序要排序的数组排序后的数组数组的长度为,不用跟自己比较,所以外层循环遍,循环第一次,数组最后一位就是最大,依次累加不用跟自己比较,也不用跟已经排序后,放在数组尾的值比较快速排序原理

冒泡排序 原理
        var arr = [12, 13, 23, 14, 16, 11];
        // 第一轮
        // 12 13 => [12, 13, 23, 14, 16, 11]
        // 13 23 => [12, 13, 23, 14, 16, 11]
        // 23 14 => [12, 13, 14, 23, 16, 11]
        // 23 16 => [12, 13, 14, 16, 23, 11]
        // 23 11 => [12, 13, 14, 16, 11, 23]
        // 第二轮
        // 13 14 => [12, 13, 14, 16, 11, 23]
        // 14 16 => [12, 13, 14, 16, 11, 23]
        // 16 11 => [12, 13, 14, 11, 16, 23]
        // 16 23 => [12, 13, 14, 11, 16, 23]
        //第三轮
        // 14 11 => [12, 13, 11, 14, 16, 23]
        // 14 16 => [12, 13, 11, 14, 16, 23]
        // 16 23 => [12, 13, 11, 14, 16, 23]
        //第四轮
        // 14 16 => [12, 13, 11, 14, 16, 23]
        // 16 23 => [12, 13, 11, 14, 16, 23]
        //第五轮
        // 16 23 => [12, 13, 11, 14, 16, 23]
实现
        /*
                bobble: 排序,升序
                @arr: [] 要排序的数组
                @return [] 排序后的数组
                */
        function bobble(arr) {
            //数组的长度为6,不用跟 自己比较,所以外层循环5遍,循环第一次,数组最后一位就是最大,依次累加
            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 nullArr;
                        nullArr = arr[j]
                        arr[j] = arr[j + 1]
                        arr[j + 1] = nullArr
                    }
                }
            }
            return arr
        }
        console.log(bobble(arr));
快速排序 原理

实现
        /*
                // quick(): 快速排序
                // @param
                // arr:[] 要排序的数组
                // @return 
                //arr:[] 排序后的数组,升序
                */
        function quick(arr) {
            if (arr.length <= 1) {
                return arr;
            }
            var rightArr = []
            var leftArr = []
            var centerIndex = Math.floor((arr.length) / 2)
            var centerValue = arr.splice(centerIndex, 1)[0]

            for (var i = 0; i < arr.length; i++) {
                if (arr[i] < centerValue) {
                    leftArr.push(arr[i])
                } else {
                    rightArr.push(arr[i])
                }
            }
            var result = quick(leftArr).concat(centerValue).concat(quick(rightArr))
            return result;
        }
        console.log(quick(arr));
插入排序 原理

实现
        var ary = [12, 15, 14, 13, 16, 11]

        function insert(ary) {
            var handAry = [];
            handAry.push(ary[0])
            for (var i = 1; i < ary.length; i++) {
                var item = ary[i];
                for (var j = handAry.length - 1; j >= 0; j--) {
                    if (item > handAry[j]) {
                        handAry.splice(j + 1, 0, item);
                        break;
                    }
                    if (j === 0) {
                        handAry.unshift(item)
                    }
                }
            }
            return handAry;
        }
        console.log(insert(ary));

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102811.html

相关文章

  • 拒信收割机の前端面经(CVTE,唯品会,百度)

    摘要:另外回答的时候要淡定,一些问题就算不懂也不能慌,要和面试官谈笑风生,然后尽量扯回到自己懂的东西上面大公司比如百度给我的感觉就是很重视基础思维和潜力。 —— 虽然我的offer少,但是我的拒信多啊 这几天终于闲下来,做一点微小的工作,整理了一些之前几家公司的前端面试题和个人经验,想做前端的师弟妹可以参考,也欢迎各同行大神来指教~ (以下问题不分先后,时间久远难免有些遗漏;很多问题面试官都...

    yzd 评论0 收藏0
  • 拒信收割机の前端面经(CVTE,唯品会,百度)

    摘要:另外回答的时候要淡定,一些问题就算不懂也不能慌,要和面试官谈笑风生,然后尽量扯回到自己懂的东西上面大公司比如百度给我的感觉就是很重视基础思维和潜力。 —— 虽然我的offer少,但是我的拒信多啊 这几天终于闲下来,做一点微小的工作,整理了一些之前几家公司的前端面试题和个人经验,想做前端的师弟妹可以参考,也欢迎各同行大神来指教~ (以下问题不分先后,时间久远难免有些遗漏;很多问题面试官都...

    channg 评论0 收藏0
  • 拒信收割机の前端面经(CVTE,唯品会,百度)

    摘要:另外回答的时候要淡定,一些问题就算不懂也不能慌,要和面试官谈笑风生,然后尽量扯回到自己懂的东西上面大公司比如百度给我的感觉就是很重视基础思维和潜力。 —— 虽然我的offer少,但是我的拒信多啊 这几天终于闲下来,做一点微小的工作,整理了一些之前几家公司的前端面试题和个人经验,想做前端的师弟妹可以参考,也欢迎各同行大神来指教~ (以下问题不分先后,时间久远难免有些遗漏;很多问题面试官都...

    BlackHole1 评论0 收藏0
  • 2019-我的前端面试题

    摘要:先说下我面试情况,我一共面试了家公司。篇在我面试的众多公司里,只有同城的面问到相关问题,其他公司压根没问。我自己回答的是自己开发组件面临的问题。完全不用担心对方到时候打电话核对的问题。 2019的5月9号,离发工资还有1天的时候,我的领导亲切把我叫到办公室跟我说:阿郭,我们公司要倒闭了,钱是没有的啦,为了不耽误你,你赶紧出去找工作吧。听到这话,我虎躯一震,这已经是第2个月没工资了。 公...

    iKcamp 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<