Javascript 此代码的时间复杂度和排序算法类型
有人能告诉我这是什么类型的分拣吗?即使添加了过滤器,这仍然是O(n)吗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];
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是关于具有较大输入的方程的复杂性和增长。因此它要么是“常数、对数、线性、指数、阶乘等”,而不是“阶乘+对数”