排序算法: 无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。

如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢 通常规定,对于两个元素x和y, 如果认为x < y,则返回-1, 如果认为x == y,则返回0, 如果认为x > y,则返回1, 这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

var xx = ['Google', 'Apple', 'Microsoft'].sort();
console.log(xx);
// ['Apple', 'Google', 'Microsoft'];

var xx = ['Google', 'apple', 'Microsoft'].sort();
console.log(xx);
// ['Google', 'Microsoft", 'apple']
apple排在了最后,是因为小写字母a的ASCII码在大写字母之后。

var xx = [10, 20, 1, 2].sort();
console.log(xx);
// [1, 10, 2, 20]
方法默认把所有元素先转换为String再排序,
结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。

如果不知道sort()方法的默认排序规则,直接对数字排序,绝对栽进坑里! 幸运的是,sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}); // [1, 2, 10, 20]


如果要倒序排序,我们可以把大的数放前面:
~~~
var arr = \[10, 20, 1, 2];
arr.sort(function (x, y) {
if (x \< y) {
return 1;
}
if (x \> y) {
return -1;
}
return 0;
}); // \[20, 10, 2, 1]