<script>
Array.prototype.swap = function(i, j)
{
var temp = this[i];
this[i] = this[j];
this[j] = temp;
}
Array.prototype.bubbleSort = function()
{
for (var i = this.length - 1; i > 0; --i)
{
for (var j = 0; j < i; ++j)
{
if (this[j] > this[j + 1]) this.swap(j, j + 1);
}
}
}
</script>
Array.prototype.bubbleSort = function(comp)
{
for (var i = this.length - 1; i > 0; --i)
{
for (var j = 0; j < i; ++j)
{
if (comp(this[j] , this[j + 1])) this.swap(j, j + 1);
}
}
}
所以我传递闭包用它来取代真实的比较,注意看上面
我用comp(this[j], this[j+1])来取代this[j] > this[j+1]
这样this[j],this[j+1]的大小关系由comp函数的执行结果决定
和你讲完这个我就要睡了...
[1,3,4,2].bubbleSort(function(x,y){x>y});
就是按从大到小排列
[1,3,4,2].bubbleSort(function(x,y){x<y});
是从小到大排列
[1,3,4,2].bubbleSort(function(x,y){x.length<y.length});
是按字符串长度排列
<script language="javascript">
var a=[1,3,4,-1,2];
var b=a.slice(0);
function box(vArray,vMax)
{
var result=[];
function array_max( ){
var i, max = this[0];
for (i = 1; i < this.length; i++)
{
if (max < this[i])
{
max = this[i];
var temp=i;
}
}
return [max,temp];
}
Array.prototype.max = array_max;
while(vArray.length!=0)
{
var y=vArray.max();
result.push(y[0]);
vArray.splice(y[1],1);
}
if(vMax)
return result;
else
return result.reverse();
}
alert(box(a,true));
alert(box(b,false));
</script>
posted on 2007-04-03 00:00
汪杰 阅读(180)
评论(0) 编辑 收藏 引用 所属分类:
javascript