冒泡算法,对数组内的所有正数进行排序,非正数的位置不变, 要求每次交换后暂停1s
题目要求
- 写出冒泡算法, 对数组内的所有正数进行排序,( 非正数的位置不变), 要求每次交换后暂停1s 代码如何写
- 如:[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) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, sleepTime)
})
}
let bubbleSort = async (a) => {
let map = {}
let arr = a.filter((item, index) => {
if (item > 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
a[map[arr[j + 1]]] = arr[j]
a[map[arr[j]]] = arr[j + 1]
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)