组长安排的工作做完了,闲得蛋疼。重新理解下最经典的冒泡算法。
原理:比较相邻的两个数,如果第一个数比后一个要大,则交换位置。
其实原理很好理解了,一看就是写个循环。但是要交换几次呢。我们就拿最简单的排序来推理一下。
假设数组是正序的1~9,我们手动排序的话需要交换0次。这是最少的交换次数。
如果数组是倒序9~1,我们需要一个一个的,9和8交换,9和7交换。。。。9和1交换,9到了最后一位,到达了他最终到达的位置,交换了8次。
然后是8,8和7交换,8和6交换。。。。8和1交换,到达了倒数第二位,这个数字也到达了他最终到达的位置,交换了7次。
。。。。。。
然后是2,2和1交换,交换了1次。
结束。
到了这里,我们定睛一看,感觉推理出来了。排了8次序,每次交换的次数是逐一递减的。
交换次数 = (n-1)+(n-2)+(n-3)+......+(n-(n-1))+0;
数学不好,不会推导,按照过程写出来就行了。
按照javascrip写下思路
function mp(arr){ //arr为需要排序的数组
var length = arr.length;
for(var i = 0;i < length - 1;i++){ //外循环为次数,需要循环n-1次
for(var j = 0; j < length - 1 - i;j++){ //内循环为交换的次数 次数为 n-1-已经循环的次数
if(arr[j] > arr[j+1]){ //如果前者比后者大,交换位置
var a = arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}
return arr;
}