在不使用任何内置排序的情况下对数组中的字符串进行排序

问题描述 投票:0回答:1

我在 JavaScript 课程中,我的一项作业给了我一个驱动程序类和充满字符串的 txt 文件。我必须创建一个包含三种方法的类,分别按元音、辅音和单词长度对列表进行排序,最后它会打印出 3 个不同的数组。我不允许使用任何内置的排序方法,例如 Array.sort。我该怎么办?

我尝试过复制字符串数组,然后我就被难住了。

javascript arrays string sorting
1个回答
0
投票

如果字符串长度较小,可以使用计数排序,其时间复杂度与数组大小呈线性关系(以最大字符串长度为常数)。

function countingSort(arr, countFn, maxStrLen = 100) {
  const counts = Array(maxStrLen + 1).fill(0);
  for (const x of arr) ++counts[countFn(x)];
  for (let i = 1; i < counts.length; i++) counts[i] += counts[i - 1];
  const res = Array(arr.length);
  for (let i = arr.length - 1; i >= 0; i--)
    res[--counts[countFn(arr[i])]] = arr[i];
  return res;
}
const vowelCount = str => str.match(/[aeiou]/ig).length;
const consonantCount = str => str.length - vowelCount(str);
const charCount = str => str.length;
const words = ['beneficiary', 'late', 'courtesy', 'momentum', 'short', 'prestige', 'stake', 'mud', 'wrist'];
console.log(...countingSort(words, vowelCount));
console.log(...countingSort(words, consonantCount));
console.log(...countingSort(words, charCount));

© www.soinside.com 2019 - 2024. All rights reserved.