我發現這種插入排序的實作可以避免使用我在大多數視頻解釋中看到的典型 while 回圈。我不確定這是否有效。這不是幾乎與冒泡排序相同嗎?使用它真的有什么特別的好處嗎?這是我的插入排序和冒泡排序的實作:
let arr = [1, 4, 6, 7, 8, 6, 3, 4, 5, 6, 6, 7];
const bubbleSort = (array) => {
for (let i = array.length; i > 0; i--) {
for (let j = 0; j < i; j ) {
if (array[j] > array[j 1])
[array[j], array[j 1]] = [array[j 1], array[j]];
}
}
};
const insertSort = (array) => {
for (let i = 1; i < array.length; i ) {
for (let j = i; j > 0; j--) {
if (array[j] < array[j - 1])
[array[j - 1], array[j]] = [array[j], array[j - 1]];
}
}
};
uj5u.com熱心網友回復:
您的冒泡排序實作并不是真正的冒泡排序 - 相反,正如您所注意到的,它與您的插入排序實作基本相同。
使用冒泡排序,您遍歷串列并交換相鄰元素,每次都更改要比較的索引 - 當您到達末尾時,您從陣列的開頭重新開始并再次執行,依此類推,直到它排序。(漂亮的可視化。)這不是你在做什么。
使用插入排序,您擁有陣列的完全排序部分和陣列的未觸及部分,從未觸及部分中取出元素并將它們放在已排序部分中的正確位置,然后再繼續下一個未排序的專案。(很好的可視化。)這就是你在這兩種實作中所做的。
使用它真的有什么特別的好處嗎?
不,這兩種排序演算法都遠不如歸并排序(及其變體)。如果您需要對陣列進行排序,目前最好的方法是使用內置.sort函式,它在底層實作了歸并排序,并且比您在 JavaScript 中自己撰寫的任何排序演算法都要快得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422791.html
標籤:
下一篇:在不使用串列的情況下顯示專案串列
