冒泡排序
冒泡排序就是比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們。元素項向上移動至正確的順序,就好像氣泡上升至表面一樣,冒泡排序因此得名。
冒泡排序實現:
function bubbleSort(array){ var length = array.length; for (var i = 0; i < length; i++) { //控制數組經過了多少輪排序 for (var j = 0; j < length - 1; j++) { //進行了當前項和下一項的比較 if (array[j] > array[j + 1]) { swap(array, j, j + 1) } } } }; function swap (array, index1, index2) { var aux = array[index1]; array[index1] = array[index2]; array[index2] = aux; //ES6寫法 [array[index1], array[index2]] = [array[index2], array[index1]]; }
我們可以看到外層的循環主要是控制了數組中經過了多少輪循環(數組中的,每一項都經過一輪,輪數和數組的長度是一致的)。然后內循環將從第一位迭代到倒數第二位,內循環實際上進行當前項與下一項的比較,如果當前項比下一項大,則交換它們。
我們還可以發現當外循環完成一輪,最后一項就已經在正確的位置(即為最大項),然而在后續的循環中,還一直進行着比較,所以我們可以改進一下
思路:
如果內循環減去外循環的輪數,就可以避免內循環中所有不必要的比較
function modifiedBubbleSort() { var length = array.length; for (var i = 0; i < length; i++) { for (var j = 0; j < length - 1 - i; j++) { if (array[j] > array[j + 1]) { swap(array, j, j + 1) } } } }