懒散了良久,人有点生锈,所以写个算法系列让本身头脑活泼起来。
(一切类型一概从小到大排序)
冒泡排序
给定数组:
var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ];
算法形貌:
将第一个元素与第二个元素对照,此时第一个元素比第二个元素大,交流他们,如许较大的元素就位于第二个位置了;
list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
将第二个元素与第三个元素对照,此时第二个元素比第三个元素小,坚持原样稳定;
list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
反复上面的步骤,直到末了我们用倒数第二个元素与倒数第一个元素比拟以后,经由第一轮排序,最大的元素93被挪动到了数组末了;
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 ]