86JS原生:数组3种排序方法

本文深入讲解了冒泡排序、插入排序和快速排序三种经典排序算法的实现原理与JS代码示例,通过具体案例帮助读者理解排序算法的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、冒泡排序:从第一项开始,与它后面的每一项进行比较,如果大于后面的项,则交换位置。第一轮把最大的一个找出来,放到最后面,第二轮把次大的一个找出来,放到倒数第二的位置。

```html:run
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>冒泡排序</title>
</head>
<body>
<script>
    var ary=[21,32,2,9,4];
    function bubbleSort(ary){
        for(var i=0; i<ary.length; i++){//正在进行第几次循环
            for(var j=0; j<ary.length-1-i; j++){//本次循环需要执行几次
                if(ary[j]>ary[j+1]){
                    var tmp=ary[j];
                    ary[j]=ary[j+1];
                    ary[j+1]=tmp;
                }
            }
        }
        return ary;
    }
    document.write(bubbleSort(ary));
</script>
</body>
</html>
```

2、插入排序:取出数组的第一项放到新数组里,让剩余的每一项与新数组的每一项进行比较,小的放左边,大的放右边。
**html 代码**

```html:run

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插入排序</title>
</head>
<body>
<script>
    var ary=[21,8,4,32,5];
    function insertSort(ary){
        var left=ary.splice(0,1);
        for(var i=0; i<ary.length; i++){//正在进行第几次循环
            var aryAry=ary[i];
            for(var j=left.length-1; j>=0;){//本次循环需要执行几次
                var leftAry=left[j];
                if(aryAry<leftAry){
                    j--;
                    if(j===-1){
                        left.unshift(aryAry);
                    }
                }else{
                    left.splice(j+1,0,aryAry);
                    break;
                }
            }
        }
        return left;
    }
    document.write(insertSort(ary));
</script>
</body>
</html>
```

3、快速排序:取出数组的中间项,然后把数组剩下的每一项与该项进行比较,如果小于该项就放在该项的左边,大于该项就放在该项的右边;再分别把左边的项和右边的项的中间项取出,重复上面的步骤到项数小于等于1为止;最后把所获得的项进行拼接。
**html 代码**

```html:run
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>快速排序</title>
</head>
<body>
<script>
    var ary=[21,8,4,32,5];
    function quickSort(ary){
        if(ary.length<=1){
            return ary;
        }
        var num=Math.floor(ary.length/2);
        var numValue=ary.splice(num,1)[0];
        var left=[];
        var right=[];
        for(var i=0; i<ary.length; i++){
            var cur=ary[i];
            if(cur<numValue){
                left.push(cur);
            }else{
                right.push(cur);
            }
        }
        return quickSort(left).concat([numValue],quickSort(right));
    }
    document.write(quickSort(ary));
</script>
</body>
</html>
```


附、js十大排序算法详解:https://www.cnblogs.com/liyongshuai/p/7197962.html

  

转载于:https://www.cnblogs.com/gushixianqiancheng/p/10967132.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值