码迷,mamicode.com
首页 > 编程语言 > 详细

数组Array的排序sort

时间:2015-04-09 23:50:44      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:排序算法   array   sort   


    JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr); 

    得到的结果为  1,12,2,21,3


    这是为什么呢?因为JavaScript中的排序默认按照ascii字符代码进行排序,也就是说,数字也是按照它们的字符串形式排序的。

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());


    这个得到什么结果呢? 2,2a,3,a,a2,b


    因为 数字的ascii码比字母的小,所以数字排在前面,字母排在后面。


    如果想继续让上面的数组arr按照数字进行排序,怎么处理呢?

    JavaScript给我们提供了一个入口,可以给sort() 方法传递一个参数,即比较函数,来告诉排序算法值与值之间是大于、小于还是等于关系。


     比较函数是有着特定算法的函数。

function compare_fn(value1, value2) {
	if (value1 < value2) {
		return -1;
	} else if (value1 > value2) {
		return 1;
	} else {
		return 0;
	}
}


    将比较函数 compare_fn 传递给sort,再进行排序,然后输出

arr.sort(compare_fn);
alert(arr);

    得到 1, 2, 3, 12, 21


JavaScript中Array对象的sort方法返回值的定义为

负值 : 如果所传递的第一个参数比第二个参数小

零   : 两个值相等

正值 : 如果第一个参数比第二个参数大


    上面的比较函数还可以简写为

function compare_fn(value1, value2) {
	return value1 - value2;
}

    这个比较的为升序排列


    如果想降序排列,直接改变上面的返回值的符号就可以了,给所有返回均取反。

    对简写的比较函数就是

function compare_fn(value1, value2) {
	return -(value1 - value2);
}

    

    即

function compare_fn(value1, value2) {
	return value2 - value1;
}

   

    简单的记法就是:顺序升;逆序降





数组Array的排序sort

标签:排序算法   array   sort   

原文地址:http://blog.csdn.net/magi1201/article/details/44965765

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!