1.代码讲解
var arr = [4,21,5,10,3];
//创建一个数组,方便实验。
Array.prototype.sorts = function(){
//给Array类增加sorts方法
var _this = this;
//把this指向存储起来,当前this指向Array(也就是调用sorts方法的数组,Array实例)
for(var i=0;i<_this.length-1;i++){
//遍历Array(实例)里的每个元素.为什么-1,因为第一遍循环的时候最大的数字已经被换到最后一位去了,所以可以少做一次循环.
for(var k=0;k<_this.length-i-1;k++){
//这边循环-1和上面-1是同样的道理,但是-i呢。因为当i=0时,最大一位数已经到最后去了,i=1第二大的数字也到最后第二位去了,所以没有必要再去比较后面已经排完序的数字了.
if(_this[k] > _this[k+1]){
//这边是冒泡排序的核心,当左边数字比右边数字大的时候,执行以下代码.
//这边大于>改为小于的话,排序就会倒过来,你不妨可以试试.
var temp = _this[k];
//声明变量temp,把左边的元素赋值给它.假设左边的元素是A,temp就等于A了.
_this[k] = _this[k+1];
//右边的元素赋值给左边的元素.假设右边的元素为B,那_this[k]就等于B了.
_this[k+1] = temp;
//把temp元素赋值给右边的元素,那右边的元素_this[k+1]就等于A了.
//最后的效果就是左边的元素_this[k]为B,右边的元素_this[k+1]为A,它们互相换了位置.
}
}
}
return _this;
//最后返回这个数组
}
console.log(arr.sorts());
//打印出[3.4.5.10.21];
2.代码运行
i=0时:[4,5,10,3,21],
i=1时:[4,5,3,10,21],
i=2时:[4,3,5,10,21],
i=3时:[3,4,5,10,21].
3.补充
上面的代码举例是数字,其实也可以对字母进行排序,比如["d","a","c"].sorts().打印出来就是["a","c","d"].字母的大小比较是来自于ASCLL码,每一个字母都有自己的一个ASCLL码,有兴趣的朋友可以去了解下.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。