我想使用这段代码进行插入排序,但是它给出了未排序的输出:
function insertionSort(arr) {
//insert each element in the right place in the sorted section
for (let i=1;i<arr.length;i++) {
var currentValue = arr[i];
for (var j=i-1; j>=0; j--) {
if (arr[j]>currentValue) {
arr[j+1]=arr[j];
}
}
arr[j+1] = currentValue;
}
return arr;
}
正确的代码:
function insertionSort(arr) {
for (let i=1; i<arr.length; i++) {
let currentValue = arr[i];
for (var j=i-1; j>=0&&arr[j]>currentValue; j--) {
arr[j+1]=arr[j];
}
arr[j+1]=currentValue;
}
return arr;
}
我就是搞不清楚这两个代码在逻辑上有什么不同。
在正确的代码中,for()
循环中的j--
停止递减。在错误的循环中,j--
继续递减,直到j=-1
。因此,当您这样做时:
arr[j+1] = currentValue;
在正确的代码中,当if
条件不再为真时,它将是j
的最后一个值。
在您的代码中,它将始终是:
arr[0] = currentValue;
因为j
的值始终是-1
。
您可以使用break
:
if (arr[j]>currentValue) {
arr[j+1]=arr[j];
}
else {
break;
}
问题内容: 我一直在使用“ if”来测试自己的版本,并且一切似乎都正常。当然,如果使用signalAll()而不是signal(),这将导致严重崩溃,但是如果一次仅通知一个线程,这怎么会出错? 他们的代码在这里 -检查put()和take()方法;在Condition的JavaDoc顶部可以看到一个更简单,更重点的实现。 下面是我实施的相关部分。 PS我知道,通常,尤其是在这样的lib类中,应该让
我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f
这个程序基本上允许用户输入任何单词,直到他/她输入单词“last”。 如果单词包含字母“s”,则应显示单词确实包含“s”或“s”,否则应显示单词不包含“s”或“s”。 示例:用户输入的单词= •约翰 詹姆斯 •馅饼 莎莉 结果: 约翰不包含's'或'S' James确实包含“s”或“s” 馅饼不含's'或'S' Sally不包含“s”或“s” 该程序可以工作,但我需要更改if语句,以便它使用equ
问题内容: 可以说我必须在for循环内使用if语句,并且for循环在特定条件下触发,而if语句仅在for循环达到特定阶段时才触发。 例如,条件是一个计数器,该计数器在发生某些事情(例如,球从屏幕上掉下来)时进行计数。每次球越过屏幕时,都会一圈绘制一个圆圈。当第一行中的圆圈到达屏幕的末端时,圆圈开始出现在第一行下方的第二行中。但是第二行对我不起作用,我已经用if语句实现了。 if语句仅在第一行的球越
我正在学习亚当·简斯的合唱团教程。 数据是用这个代码块加载的 而准备就绪被定义为 我把这个序列理解为 首先-创建一个名为promises的数组,其中第一项是来自此链接的已解析json,第二项是来自该文件的id/值对的映射 第二,获取promise变量中的所有promise,如果成功,则触发函数ready,如果失败,则不执行任何操作 如果这是对的,那么相对于这样的东西有什么优势呢?我用伪代码写这个因
我的问题是:当我选择错误的数字时,它会转到循环的开始。我希望它转到要求选择的部分(int choice=scanner.nextInt();)再问一遍。“1”->切换,“2”->“退出”,“3”->再次询问选择。
问题内容: 我可以使用分号在Python中加入行,例如 但是为什么我不能这样做 问题答案: 简短的(至今有效的)答案只是“因为未定义语言语法以允许它”。至于为什么 这是 的话,就很难,如果除非你问任何人与语法的部分来了,但我想这是由于可读性,这是Python的目标之一并非不可能,以确保1。 你为什么要写像这样晦涩难懂的东西?只需将其分成多行: 我认为这种变体要清晰得多。 1自: 可读性计数。
问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路