因非科班出身,所以最近再補一些資料結構演算法的知識.今天詳細來說一下js實現的氣泡排序.同時它也最簡單易懂.對初學者應該會有幫助.
氣泡排序的核心思想是兩兩比較相鄰的數,如果順序相反則交換位置.直到沒有順序相反的為止.下面舉例說明:
有乙個陣列 let arr = [5, 4, 3, 2, 1]; 我們現在要使用氣泡排序演算法實現對這個陣列的正序排序;也就是使之排序為[1, 2, 3, 4, 5];
剛才說了,氣泡排序核心思想是拿兩個相鄰的數一一做比較.那麼,現在開始;
原陣列: let arr = [5, 4, 3, 2, 1];
第一輪比較:
比較規則: 首先拿4和5比,發現4比5小.是倒序.則需要交換位置,那麼陣列就變成[4, 5, 3, 2, 1];
然後再拿3和5比,發現3比5小.是倒序.則需要交換位置.那麼陣列就變成[4, 3, 5, 2, 1];
然後再拿2和5比,發現2比5小.是倒序.則需要交換位置.那麼陣列就變成[4, 3, 2, 5, 1];
然後再拿1和5比,發現1比5小.是倒序.則需要交換位置.那麼陣列就變成[4, 3, 2, 1, 5];
小結: 這樣一輪比較下來,有幾個重要規律發現,首先
1. 最大的數跑到了最後面;
2.這一輪比較完一共比較了4次;
需要注意的是,這還沒完,我們要的結果是[5, 4, 3, 2, 1].然後進行第二輪比較:
此時的陣列已變成[4, 3, 2, 1, 5];
第二輪比較:
比較規則: 首先拿3和4比,發現3比4小.是倒序.則需要交換位置,那麼陣列就變成[3, 4, 2, 1, 5];
然後再拿2和4比,發現2比4小.是倒序.則需要交換位置.那麼陣列就變成[3, 2, 4, 1, 5];
然後再拿1和4比,發現1比4小.是倒序.則需要交換位置.那麼陣列就變成[3, 2, 1, 4, 5];
小結: 第二輪下來,有幾個規律發現:
1.因為第一輪已經把最大的數放到最後的位置了.所以,這次一共比較了3次就完成了.因為最後兩個5和4不用比較了.
第三輪比較: 此時陣列已變為[3, 2, 1, 4, 5];
比較規則: 首先拿2和3比,發現2比3小.是倒序.則需要交換位置.那麼陣列就變成[2, 3, 1, 4, 5];
然後再拿1和3比,發現1比3小.是倒序.則需要交換位置.那麼陣列就變成[2, 1, 3, 4, 5];
小結: 又比第二輪少比較一次;
第四輪比較: 此時陣列已變為[2, 1, 3, 4, 5];
比較規則: 拿1和2比,發現1比2小.是倒序.則需要交換位置.那麼陣列就變成[1, 2, 3, 4, 5];
小結:至此,就完成了陣列的排序; 現在總結規律
規律: 如果需要排序乙個內有5項數字的陣列,則需要比較4輪.第一輪對比4次.第二輪對比3次.第三輪對比2次.第四輪對比1次.(所以在下面的內迴圈中需要減 i ,當然不減 i 也是可以的,但是會浪費多次迴圈.減1 是因為每次迴圈完後,上一次迴圈到最後面那個數不用比較了).
**邏輯很簡單,下面直接上**
function sort(arr) } }
return arr;
}
Js氣泡排序詳解
氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再 需要交換,也就是說該數列已經排序完成。兩兩相比較,比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 對每一對相鄰元素作同樣的工作,從開始第一對到...
js氣泡排序詳解
原理 依次比較相鄰的兩個值,如果後面的比前面的小,則將小的元素排到前面。依照這個規則進行多次並且遞減的迭代,直到順序正確。寫法 詳解 兩個迴圈,第乙個迴圈是迴圈遍歷陣列,i表示陣列下標,第二個迴圈則是判斷陣列元素下標為i和下標為i 1的元素的大小。如果下標為i的元素大於洗標為i 1的元素,則將下標為...
js氣泡排序詳解
js中的氣泡排序,就是把相鄰的兩個資料進行比較,如果順序相反就交換位置,直到所有的資料按照公升序 從小到大 或降序 從大到小 的方式進行排列 例 var arr 5,4,3,2,1 用氣泡排序把這個陣列公升序排列,也就是把陣列變為 1,2,3,4,5 第一輪 arr 5,4,3,2,1 1 比較5和...