忽略我的英语不好,只需一点代码
也许您可以找到不差的东西
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
设计时总是比较设计次数更多,如何解决它
答案 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]
对之后,再次查看该对以确保正确交换了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);