*数组的冒泡排序:经典算法之一
function bubbleSort(arr){
//控制比较多少轮[每一轮都是把当前最大值放在末尾]
for(var i=0;i<arr.length - 1;i++){
//判断需不需要比较
var flag = false;
//控制每一轮比较多少次[从数组第一项开始,俩俩比较]
for (var j = 0; j<arr.length - 1 - i; j++){
//当前项大于后一项,则让俩者交换位置
if(arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//只要还发生一次交换位置,说明我们假设失败了,数组还没有排好序,true还没排好序
flag = true;
}
}
//如果当前这一轮,俩俩比较了一圈,都没有发现需要交换位置的,说明现在的数组就是排好序的,则直接结束循环即可,没必须再比较了
//如果当前已经排好序了"flag===false",不需要在比较下一轮了
if(!flag) break;
}
return arr;
}
var arr = [16, 8, 134, 25, 1];
console.log(bubbleSort(arr));//=>[1, 8, 16, 25, 134]
8 16 [8, 16, 134, 25, 1]
16 134 [8, 16, 134, 25, 1]
134 25 [8, 16, 25, 134, 1]
134 1 [8, 16, 25, 1, 134] 第一轮两两比较结束后,当前最大的值放在了末尾
8 16 [8, 16, 25, 1, 134]
16 25 [8, 16, 25, 1, 134]
25 1 [8, 16, 1, 25, 134]
8 16 [8, 16, 1, 25, 134]
16 1 [8, 1, 16, 25, 134]
8 1 [1, 8, 16, 25, 134]
i控制比较多少轮 i=0;i<arr.length-1;i++ “每一轮的结果是把当前最大的值放在末尾,所以数组有5项,只要把4个值分别放在末尾,即可完成排序”
每一轮都干相同的事情:从数组第一项开始循环,拿出每一项和其后一项进行比较,如果当前项比后一项要大,则两者交换位置 j=0;j<arr.length-1-i;j++ “不用和自己比,五个值最多循环4次「也就是比较四次」;还不需要和之前放在末尾的比;”
当前项:arr[j]
后一项:arr[j+1]
i=0 第一轮 还没有放末尾过
i=1 第二轮 已经放末尾1个
i=2 第三轮 已经放末尾2个
...
i是几,相当于已经放在末尾几个
var arr = [8,16,25,1,1]; sort(排序)
arr.sort(function(a,b){
//迭代数组中的每一项,每迭代一次,这个回调函数执行一次
// a:当前迭代这一项
// b:它的后一项
//返回一个">0"的值,让a/b交换位置,否则位置不变
//------新版谷歌正好反着
// b:当前迭代这一项 a:它的后一项 返回“<0"的值让俩者交换位置
return a - b;//=>升序
});
console.log(arr);//=>[1, 1, 8, 16, 25]