JS实现排序算法

目录

一、冒泡排序

一、冒泡排序

 /*
    * 方法名:sortArr
    * 功能介绍:对数组进行排序(冒泡算法)
    * arguments:
    *   arr(必输项):需要排序的数组;
    *   action(非必输项):"up"-升序,"down"-降序(默认)
    * */
    let sortArr = function (arr,action) {
        /*判断需要排序的数据是否是数组*/
        if(Object.prototype.toString.call(arr) !='[object Array]'){
            console.log("请使用数组格式排序。");
            return arr;
        }
        /*空数组或者数组1个元素,不需要排序直接跳出*/
        let len = arr.length;
        let temp;
        if(len <= 1){
            console.log("数组为空。");
            return arr;
        }
        for(let i=0;i<len-1;i++){
            for(let j=0;j<len-i-1;j++){
                if(action ==="up")
                {
                    /*升序*/
                    if(arr[j]>arr[j+1]){
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] =temp;
                    }
                }
                else
                {
                    /*降序*/
                    if(arr[j]<arr[j+1]){
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] =temp;
                    }
                }
            }
        }
        return arr;
    }

二、二分法排序算法

思路:

【1】每一次都找到数组的中间数(midValue),作为比较基数;

【2】用数组的每一个元素(value)和中间数做比较;

【3】如果是升序,当value<midValue时,就把value放到midValue左边;当value>=midValue,就把value放到midValue右边;

【4】降序同理;

/*
    * 方法名:sortArr
    * 功能介绍:对数组进行排序(冒泡算法)
    * arguments:
    *   arr(必输项):需要排序的数组;
    *   action(非必输项):"up"-升序,"down"-降序(默认)
    * */
    function sortArr(arr,action) {
        /*判断需要排序的数据是否是数组*/
        if(Object.prototype.toString.call(arr) !='[object Array]'){
            console.log("请使用数组格式排序。");
            return false;
        }
        /*空数组,不需要排序直接跳出*/
        let len = arr.length;
        let leftArr = [];//缓存左边数组
        let righrArr = [];//缓存右边数组
        if(len <= 1){
            return arr;
        }
        //获取比较基准的索引
        let index = Math.floor(len/2);
        //通过splice获取到比较基准的数据
        let midValue = arr.splice(index,1);
        for(let i=0;i<arr.length;i++){
                /*与基准值做比较,大的在右边,小的在左边*/
            if(arr[i]>midValue){
                righrArr.push(arr[i]);
            }else{
                leftArr.push(arr[i]);
            }
        }
        /*通过递归进行循环排序*/
        return action ==="up" ?sortArr(leftArr,action).concat(midValue,sortArr(righrArr,action))
            :sortArr(righrArr,action).concat(midValue,sortArr(leftArr,action));
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值