简单数组按JS排序

时间:2018-08-23 10:02:37

标签: javascript arrays sorting

忽略我的英语不好,只需一点代码

也许您可以找到不差的东西

let arr = [10, 5, 4, 22, 0, 25, 1000, 1, 5555 , 5464564]; //example Array
let j = 0; //tag
let m = 0; //count
for(var i = 0; i <= arr.length-1; i++){
    m++;
    console.log(i);
    if(arr[i] > arr[i + 1]){
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]; //exchange
        j = Math.max(i, j);
        i = Math.max(i - 2, -1); 
    }
    else {
        if(i < j){
            i = Math.max(i, j); // get tag
        }
    }
}
console.log(arr, j, m); //result tag count

我发现它比i = 0设计时总是比较设计次数更多,如何解决它

2 个答案:

答案 0 :(得分:0)

您介意检查一下:for(var i=0; **i<=arr.length-1**; i++)吗?特别是<=符号

答案 1 :(得分:0)

首先,我找不到执行此操作的原因,但是通过删除j尝试了您的代码,现在我知道了:p

没有j

的测试

在这里我们可以看到,每当i包围一对需要交换的货币对时,它就会回到i - 2

如果i等于0两次,是因为在交换了arr[0]-arr[1]对之后,再次查看该对以确保正确交换了 >

arr = [10, 5, 4, 22, 0, 25, 1000, 1,5555 ,5464564];
let m = 0;

for(let i = 0; i < arr.length; i++){
    m++;
    console.log(i);
    // let's log the array as well
    console.log(arr);
    if(arr[i] > arr[i + 1]){
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        
        // j = Math.max(i, j);
        i = Math.max(i - 2, -1); 
    }
    else {
        // if(i < j){
        //     i = Math.max(i, j);
        // }
    }
}

console.log(arr, m);

让我们重新添加j

通过在后面添加j可以看到它充当i的“检查点”,其行为与之前解释i === 0的原因相同

let arr = [10, 5, 4, 22, 0, 25, 1000, 1, 5555 , 5464564];
let j = 0;
let m = 0;

for(var i = 0; i <= arr.length-1; i++){
    m++;
    console.log(i);
    console.log(arr);
    if(arr[i] > arr[i + 1]){
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]; //exchange
        j = Math.max(i, j);
        i = Math.max(i - 2, -1); 
    }
    else {
        if(i < j){
            i = Math.max(i, j); // get tag
        }
    }
}
console.log(arr, j, m); //result tag count

最终是一个解决方案

因为我们发现i仍在0处以确保交换了它们,但我们仍然知道它们已被交换,因此i不需要停留{ {1}}那么如何消除这种无用的安全性呢?

0


如果您没有/真的不想这样做,请使用sort

let arr = [10, 5, 4, 22, 0, 25, 1000, 1, 5555 , 5464564];
let j = 0;
let m = 0;

for(var i = 0; i <= arr.length-1; i++){
    m++;
    console.log(i);
    console.log(arr);
    if(arr[i] > arr[i + 1]){
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        j = Math.max(i, j);
        
        // Here
        if (i !== 0) {
           i = Math.max(i - 2, -1); 
        }
        
    }
    else {
        if(i < j){
            i = Math.max(i, j);
        }
    }
}
console.log(arr, j, m);