懒惰了好久,人有点生锈,因此写个算法系列让本身脑筋活跃起来。算法
(全部范例一概从小到大排序)数组
冒泡排序测试
给定数组:code
var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ];
算法描述:排序
将第一个元素与第二个元素对比,此时第一个元素比第二个元素大,交换他们,这样较大的元素就位于第二个位置了;io
list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
将第二个元素与第三个元素对比,此时第二个元素比第三个元素小,保持原样不变;console
list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
重复上面的步骤,直到最后咱们用倒数第二个元素与倒数第一个元素相比以后,通过第一轮排序,最大的元素93被移动到了数组最后;function
list = [ 26, 54, 17, 77, 31, 44, 88, 55, 20, 93 ];
而后咱们重复1,2,3步骤;通过第二轮咱们会找到次大的元素排在倒数第二位,即88被移动到了数组倒数第二位;循环
list = [ 26, 17, 54, 31, 44, 77, 55, 20, 88, 93 ];
再次重复直到整个数组有序;语法
第1轮: [ 26, 54, 17, 77, 31, 44, 88, 55, 20, 93 ] 第2轮: [ 26, 17, 54, 31, 44, 77, 55, 20, 88, 93 ] 第3轮: [ 17, 26, 31, 44, 54, 55, 20, 77, 88, 93 ] 第4轮: [ 17, 26, 31, 44, 54, 20, 55, 77, 88, 93 ] 第5轮: [ 17, 26, 31, 44, 20, 54, 55, 77, 88, 93 ] 第6轮: [ 17, 26, 31, 20, 44, 54, 55, 77, 88, 93 ] 第7轮: [ 17, 26, 20, 31, 44, 54, 55, 77, 88, 93 ] 第8轮: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ] 第9轮: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]
算法实现:
function bubble(list) { // 开启length-1轮循环,由于最后一轮只剩一个元素,不必比较 for (let i = 0; i < list.length - 1; i++) { // 两两对比,每次循环时j的取值上限须要舍去尾部已经有序的数据,因此length-1-i for (let j = 0; j < list.length - 1 - i; j++) { if (list[j] > list[j + 1]) { // ES6语法 交换元素 [list[j], list[j + 1]] = [list[j + 1], list[j]]; } } } } // 测试 var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ]; bubble(list); console.log(list); // [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]