js中的sort方法和原理

文章类型:Javascript

发布者:hp

发布时间:2023-05-19

sort() 方法是 JavaScript 数组的原生方法,用于对数组元素进行排序。会原地修改数组,按照特定的排序规则重新排列数组元素。

一:原理:

1:基于"字典顺序"(Lexicographic order)或"字符顺序"(Character order),而不是严格的数值大小比较(数字数组的排序可能不会按照数值大小来排序)。

2:将数组中的元素转换为字符串,然后比较这些字符串的 Unicode 值来决定排序顺序

3:采用原地排序(快速排序、归并排序)算法,直接修改原始数据,而不是创建新的排序后的数组

二:步骤

1:将数组中的元素转换为字符串

2:比较两个字符串的首个字符的 Unicode 值。如果第一个字符串的 Unicode 值小于第二个字符串的 Unicode 值,则将第一个字符串排在前面;如果大于,则将第一个字符串排在后面;如果相等,则比较下一个字符

3:重复上述比较步骤,直到找到正确的位置,将所有元素排序完成。

三:代码

const numbers = [10, 2, 5, 1];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出: [1, 2, 5, 10]

四:总结

1:通过将数组元素转换为字符串并比较它们的 Unicode 值来排序数组

2:按字典顺序排序字符串,对于数字数组可能得到不符合预期的结果

3:通过传递比较函数可以自定义排序规则,从而正确地对数字数组进行排序

五:手写sort

简单版本(进行大小比较,叫唤值,实现升序排序)

function jssort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        // 交换位置
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}