【发布时间】:2020-03-24 10:45:45
【问题描述】:
我正在尝试实现一种排序机制,在未排序的数组中,一次只挑选一个元素并将其放置在数组前面,需要以最少的迭代次数来实现这一点。
[3,1,3,2] //input array
[2,3,1,3]// step one
[1,2,3,3]// step tow and the result, iterations = 2
我给出的示例尝试是,这似乎不起作用 -
let sort = (inputArr) => {
let originalArr = inputArr;
let arrCopy = [...inputArr];
let sortedArr = [...inputArr];
sortedArr.sort();// need to achive here
let interations = 0;
//find 2nd max number
let secLarNum;
Math.max(...arrCopy);
arrCopy = removeItem(arrCopy, Math.max(...arrCopy));
while(JSON.stringify(sortedArr) !== JSON.stringify(originalArr)) {
let index = 0;
secLarNum = Math.max(...arrCopy);
arrCopy = removeItem(arrCopy, Math.max(...arrCopy));
index = originalArr.indexOf(secLarNum);
for(let i=0; i < originalArr.length; i ++){
if(originalArr[index] > originalArr[i] && index !== -1){
let currValue = originalArr[index];
originalArr.splice(index, 1);
originalArr.unshift(currValue);
interations ++;
// break;
}
}
}
console.log('Sorted array ', originalArr);
return interations;
}
let removeItem = (array, item) => {
return array.filter((i) => i !== item);
}
console.log(sort([3,3,2,1,4])); // 2
【问题讨论】:
-
“似乎不起作用”是模糊的 - 它具体有什么问题?它会抛出异常、给出错误的结果、陷入无限循环还是其他原因?请编辑问题以使其更具体。包括输入、预期结果和实际结果。
-
@kaya3 它实际上进入了一个无限循环。
标签: javascript arrays node.js algorithm sorting