排序算法

  • 通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
  • sort()方法会直接对Array进行修改,它返回的结果仍是当前Array

    1. var a1 = ['B', 'A', 'C'];
    2. var a2 = a1.sort();
    3. a1; // ['A', 'B', 'C']
    4. a2; // ['A', 'B', 'C']
    5. a1 === a2; // true, a1和a2是同一对象

    例子

  • Array的sort()方法默认把所有元素先转换为String再排序 ( 默认排序规则 ),不能直接对数字排序

  • sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
  • 结果’10’排在了’2’的前面,因为字符’1’比字符’2’的ASCII码小。
  • 字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。
    ```javascript // 看上去正常的结果: [‘Google’, ‘Apple’, ‘Microsoft’].sort(); // [‘Apple’, ‘Google’, ‘Microsoft’];

// apple排在了最后: [‘Google’, ‘apple’, ‘Microsoft’].sort(); // [‘Google’, ‘Microsoft”, ‘apple’]

// 无法理解的结果: [10, 20, 1, 2].sort(); // [1, 10, 2, 20]

  1. <a name="jayDD"></a>
  2. ### 按数字大小排序
  3. ```javascript
  4. var arr = [10, 20, 1, 2];
  5. arr.sort(function (x, y) {
  6. if (x < y) {
  7. return -1;
  8. }
  9. if (x > y) {
  10. return 1;
  11. }
  12. return 0;
  13. });
  14. console.log(arr); // [1, 2, 10, 20]

倒序排序

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

```