文章标题

来源:互联网 发布:奔驰诊断软件下载 编辑:程序博客网 时间:2024/06/17 11:46

今天我看书的时候,看到了javascript的sort排序,对于不是这两种类型 :数值类型或者valueOf()方法返回数值类型的对象类型

我还能理解,但是对于是这两种类型,我百思不得其解,最后去网上找找,弄懂了一些

var values =[0,1,5,10,15];
values.sort();
alert(values); //0,1,10,15,5

结果和我们所想要的不一样

这时可以加上
function compare(value1,value2){
return value1-value2;
}
values.sort(compare);
alert(values); //0,1,5,10,15

但是这个是怎么实现的呢???????????

我在https://github.com/v8/v8/blob/master/src/js/array.js 这个地址上找到了答案,由于资历尚浅,还有许多看不懂的地方

只看了一些主要部分的(下面的代码试用于数组长度在22之内的数组,大于这个数排序的算法就用别的了)

function InsertionSort(a, from, to) {for (var i = from + 1; i < to; i++) {  var element = a[i];  for (var j = i - 1; j >= from; j--) {    var tmp = a[j];    var order = comparefn(tmp, element);    if (order > 0) {      a[j + 1] = tmp;    } else {      break;    }  }  a[j + 1] = element;}

};

comparefn(tmp, element){
return tmp-element;
}

a代表数组 from 表示要排序的第一个序号(数组从零开始计数的)
to 表示排序的最后一个序号

该算法主要是选择排序的想法,
假设要排序 3,2,4,10,1 从小到大
from=0 to=4
第一遍的时候
i=1
element=3
j=0 这时 tmp=2 3>2 把a[1]=element
j=-1<0 内层循环结束
a[j+1]=a[0]=tmp=2;

i=1 这层情况结束,这时顺序是 2,3,4,10,1

i=2
element=4
由于2和3 都小于4 故都break
同理可得,最后的顺序是1,2,3,4,10

原创粉丝点击