我在 JavaScript 课程中,我的一项作业给了我一个驱动程序类和充满字符串的 txt 文件。我必须创建一个包含三种方法的类,分别按元音、辅音和单词长度对列表进行排序,最后它会打印出 3 个不同的数组。我不允许使用任何内置的排序方法,例如 Array.sort。我该怎么办?
我尝试过复制字符串数组,然后我就被难住了。
如果字符串长度较小,可以使用计数排序,其时间复杂度与数组大小呈线性关系(以最大字符串长度为常数)。
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));