// sorting an array
const least_num = (arr)=>{
let smallest = arr[0];
let smallest_index = 0;
for(let i=1; i<arr.length;i++){
if (arr[i] < smallest) {
smallest = arr[i];
smallest_index = i;
}
}
return smallest_index
}
const sortArray = (arr)=>{
const newArr = [];
for(let i in arr){
let smallest = least_num(arr);
console.log(smallest,i)
console.log(arr.splice(smallest,1),arr)
}
return newArr;
}
console.log(sortArray([5,4,3,2,1]));
我正在尝试不使用 sort() 对数组进行排序。 它停留在数组长度 2 处。 可能是因为for循环。以及如何使用索引删除数组中的元素。
几个问题:
代码永远不会向
newArr
添加任何内容,因此该函数始终返回一个空数组。它应该将删除(拼接)的元素添加到 newArr
。这可以通过 newArr.push(...arr.splice(smallest,1))
来完成
for..in
循环的迭代次数将比预期少,因为在每次迭代中数组都会变短,从而消除循环的未来迭代。由于想法是从数组中删除 all 项目,因此只需继续循环,直到数组为空 while (arr.length)
通过这两项更正,您的代码可以正常工作:
const least_num = (arr)=>{
let smallest = arr[0];
let smallest_index = 0;
for(let i=1; i<arr.length;i++){
if (arr[i] < smallest) {
smallest = arr[i];
smallest_index = i;
}
}
return smallest_index
}
const sortArray = (arr)=>{
const newArr = [];
while(arr.length) {
let smallest = least_num(arr);
console.log(smallest)
newArr.push(...arr.splice(smallest,1));
console.log(arr)
}
return newArr;
}
console.log(sortArray([5,4,3,2,1]));
你也可以试试这个。
const sortArray = (arr)=>{
let originalArr = [...arr];
var sortArr = [];
while(originalArr.length) {
let val = originalArr[0];
for ( let j = 1; j < originalArr.length; j++ ) {
if(val>originalArr[j]) {
val = originalArr[j];
}
}
sortArr.push(originalArr.splice(originalArr.indexOf(val), 1)[0]);
}
return sortArr;
}
console.log(sortArray([5,4,3,2,1]));
您可以尝试按升序和降序对数组进行排序
function sortGivenArray(arr, order) {
let temp;
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if ((order === "asc" && arr[i] > arr[j]) || (order === "dsc" && arr[i] < arr[j])) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
console.log(sortGivenArray([6, 4, 8, 2, 10, 30, 31], "asc"));
console.log(sortGivenArray([6, 4, 8, 2, 10, 30, 31], "dsc"));