2020-08-04

冒泡算法,对数组内的所有正数进行排序,非正数的位置不变, 要求每次交换后暂停1s

题目要求

  1. 写出冒泡算法, 对数组内的所有正数进行排序,( 非正数的位置不变), 要求每次交换后暂停1s 代码如何写
  2. 如:[11, -1, 6, 5, -4, -7, 9, 8] 结果:[5, - 1, 6, 8, - 4 - 7, 9, 11]

js代码

let arr = [11, -1, 6, 5, -4, -7, 9, 8]

let sleep = (sleepTime) => {
    // 相对于用while轮询时间戳的方式,异步对象在资源占用方面好很多
    return new Promise((resolve, reject) => {
        setTimeout(resolve, sleepTime)
    })
}

let bubbleSort = async (a) => {
    let map = {}
    let arr = a.filter((item, index) => {
        if (item > 0) {
            // 例如 把新数组中的11映射到原数组中的下标0,map对象中的键值对是 '11': 0
            map[item] = index
            return item
        }
    })
    let len = arr.length,
        cnt = 0
    for (let i = 0; i < len - 1; i++) {
        for (let j = 0; j < len - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                let temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
                // 交换的位置是j和j+1
                a[map[arr[j + 1]]] = arr[j]
                a[map[arr[j]]] = arr[j + 1]
                // 交换位置后,更新map中的映射关系
                temp = map[arr[j]]
                map[arr[j]] = map[arr[j + 1]]
                map[arr[j + 1]] = temp
                console.log(`第${++cnt}次排序: 
                【新数组:${arr}】,
                【原数组:${a}】,
                【交换的元素:${arr[j]} ${arr[j+1]}】,
                【原数组交换的下标:${map[arr[j]]} ${map[arr[j + 1]]}】`);
                await sleep(1000)
            }
        }
    }
}

bubbleSort(arr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值