选择、冒泡、快速排序

排序作为算法当中很重要的一块,也是面试官喜欢考的东西,今天给大家分享三种比较简单且基本的排序方式。如下代码所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
      var arr=[3,6,7,1,8,2,5,4,9,0]
        //冒泡排序
        function getRank(arr){
            var num=null;
            for(var i=0; i<arr.length-1;i++){//遍历数组至倒数第二位,所以length减1
                for(var j=i+1;j<arr.length;j++){//从原数组的第二位开始遍历,所以i+1
                    if(arr[i]>arr[j]){//数组的第一位arr[i],与数组的第二位arr[j]比较
                        //此时arr[j]是较小的值,要将较小的值给arr[i]存储,所以:
                        num=arr[j];//将较小的值给num存储
                        arr[j]=arr[i];//然后将较大的值给arr[j],让arr[j]又与下一位比较
                        arr[i]=num;//再将较小的值给arr[i]
                    }
                }
            }
            return arr
        }

        //快速排序
        function getRank(arr){
            //如果数组长度小于1直接返回
            if(arr.length<=1){
                return arr;
            }
            var arrIndex=Math.floor(arr.length/2)//获取中间值,这是个索引值
            var arrCenterVal=arr.splice(arrIndex,1)//利用索引取出中间值
            var left=[],//存储比中间值小的
                right=[];//存储比中间值大的
            for(var i=0;i<arr.length;i++){
                if(arr[i]<arrCenterVal){//如果小于中间值
                    left.push(arr[i])//比中间值小的放数组left
                }else{
                    right.push(arr[i])//比中间值大的放数组right
                }
            }
            //递归执行以上操作,知道数组长度小于等于1
            return getRank(left).concat(arrCenterVal,getRank(right))
        }

        //选择排序  这个就不写注释了,自己试着理解下吧,有问题,请评论
        function getRank(arr){
            var max;
            var index;
            for(var i=0;i<arr.length-1;i++){
                max=arr[i];
                index=i;
                    for(var j=i+1;j<arr.length;j++){
                        if(arr[j]>max){
                            max=arr[j]
                            index=j;
                        }
                    }
                arr[index]=arr[i];
                arr[i]=max; 
            }
            return arr;
        }  
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值