冒泡排序
冒泡排序就是比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡上升至表面一样,冒泡排序因此得名。
冒泡排序实现:
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) } } } }