1. 程式人生 > 實用技巧 >冒泡演算法,對陣列內的所有正數進行排序,非正數的位置不變, 要求每次交換後暫停1s

冒泡演算法,對陣列內的所有正數進行排序,非正數的位置不變, 要求每次交換後暫停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) => {
    // 相對於用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)