Javascript 此代码的时间复杂度和排序算法类型

Javascript 此代码的时间复杂度和排序算法类型,javascript,arrays,algorithm,sorting,Javascript,Arrays,Algorithm,Sorting,有人能告诉我这是什么类型的分拣吗?即使添加了过滤器,这仍然是O(n)吗 const sortMe = arr => { let sorted = new Array(arr.length).fill(0); for(let i = 0; i < sorted.length; i++){ if(sorted.indexOf(arr[i]) === -1) sorted[arr[i] - 1] = arr[i];

有人能告诉我这是什么类型的分拣吗?即使添加了过滤器,这仍然是O(n)吗

const sortMe = arr => {

    let sorted = new Array(arr.length).fill(0);

    for(let i = 0; i < sorted.length; i++){
        if(sorted.indexOf(arr[i]) === -1) 
            sorted[arr[i] - 1] = arr[i];
        else sorted.splice(sorted.indexOf(arr[i]), 0, arr[i]);
    }

    return sorted.filter(x => x !== 0);
}

console.log(sortMe([3,15,2,1,18,2,5,6,7,12,3,1,2,3]))
const sortMe=arr=>{
让排序=新数组(arr.length).fill(0);
for(设i=0;ix!==0);
}
控制台日志(排序([3,15,2,1,18,2,5,6,7,12,3,1,2,3]))
很抱歉问这个问题,我不是计算机科学专业的毕业生。

那是O(n)^2

首先,您要经历一个循环:

for(let i = 0; i < sorted.length; i++){
indexOf
从第一个元素开始,然后逐步移动到每个元素,直到到达所搜索的元素。因此,对于O(n)中的每个步骤,您都在调用一个迭代整个列表的函数,这意味着您在调用O(n),n次,使其成为O(n*n)或O(n^2)


注意:您可能认为它不是O(n^2),因为您正在处理
indexOf
列表的一个子集。然而,一般情况下,仍在查看长度为n/2的列表

您还询问了添加过滤函数的问题。这可能使它看起来应该是O(n^2+n)

对于big-O表示法,可以删除所有常量:O-notation是关于具有较大输入的方程的复杂性和增长。因此,它要么是“常数、对数、线性、指数、阶乘等”,而不是“阶乘+对数”。

这就是O(n)^2

首先,您要经历一个循环:

for(let i = 0; i < sorted.length; i++){
indexOf
从第一个元素开始,然后逐步移动到每个元素,直到到达所搜索的元素。因此,对于O(n)中的每个步骤,您都在调用一个迭代整个列表的函数,这意味着您在调用O(n),n次,使其成为O(n*n)或O(n^2)


注意:您可能认为它不是O(n^2),因为您正在处理
indexOf
列表的一个子集。然而,一般情况下,仍在查看长度为n/2的列表

您还询问了添加过滤函数的问题。这可能使它看起来应该是O(n^2+n)

对于big-O表示法,可以删除所有常量:O-notation是关于具有较大输入的方程的复杂性和增长。因此它要么是“常数、对数、线性、指数、阶乘等”,而不是“阶乘+对数”