【JavaScript】25_冒泡排序及优化 与 选择排序

11、排序

思路一:

冒泡排序

9, 1, 3, 2, 8, 0, 5, 7, 6, 4

  • 比较相邻的两个元素,然后根据大小来决定是否交换它们的位置

  • 例子:
    第一次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9
    第二次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9
    第三次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9

    倒数第二次 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

  • 这种排序方式,被称为冒泡排序,冒泡排序是最慢的排序方式,
    数字少还可以凑合用,不适用于数据量较大的排序

<script>
    const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4]
    for (let j = 0; j < arr.length - 1; j++) {
        for (let i = 0; i < arr.length - 1; i++) {
            // arr[i] 前边的元素 arr[i+1] 后边元素
            if (arr[i] < arr[i + 1]) {
                // 大数在前,小数在后,需要交换两个元素的位置
                let temp = arr[i] // 临时变量用来存储arr[i]的值
                arr[i] = arr[i + 1] // 将arr[i+1]的值赋给arr[i]
                arr[i + 1] = temp // 修改arr[i+1]的值
            }
        }
    }

    console.log(arr)
</script>

冒泡优化

    <script>
        /* 
            1, 3, 2, 8, 0, 5, 7, 6, 4, 9
            1, 2, 3, 0, 5, 7, 6, 4, 8, 9
            1, 2, 0, 3, 5, 6, 4, 7, 8, 9
            1, 0, 2, 3, 5, 4, 6, 7, 8, 9
        */
        const arr = [9,1,3,2,8,9,0,5,7,6,4]
        //使用优化后的冒泡排序-----内层循环条件变为length-1-j;呈斜线减少查询次数
         for(let j = 0; j < arr.length -1; j++){
             for (let i = 0; i < arr.length - 1 - j; i++) {
                 if (arr[i] > arr[i + 1]) {
                     let temp = arr[i] 
                     arr[i] = arr[i + 1]
                     arr[i + 1] = temp
                 }
             }
            console.log(arr)
         }
    </script>

思路2:
9, 1, 3, 2, 8, 0, 5, 7, 6, 4

  • 取出一个元素,然后将其他元素和该元素进行比较,如果其他元素比该元素小则交换两个元素的位置
  • 例子:
    0, 9, 3, 2, 8, 1, 5, 7, 6, 4
    0, 1, 9, 3, 8, 2, 5, 7, 6, 4
    0, 1, 2, 9, 8, 3, 5, 7, 6, 4

选择排序

    <script>
        //选择排序
        for(let i=0; i<arr.length; i++){
            for(let j=i+1; j<arr.length; j++){
                if(arr[i] > arr[j]){
                    // 交换两个元素的位置
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }

        }
        console.log(arr)
    </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名之以父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值