以下代码是一个循环遍历数组并检查整数数组是否已排序的函数,如果是,则返回true,否则返回false。我的一个朋友帮助了我,但我忘了他的解释是什么。对于if语句,我无法理解它的含义。是的,如果数组的每个索引(array [i])都大于数组的每个索引加1(array [i + 1])那么变量tell是假的。那么,例如,如果数组[31,4,99,23,8]大于[31 + 1,4 + 1,99 + 1,23 + 1,8 + 1],则返回false?混淆主要来自“array [i + 1]”究竟是什么。提前谢谢。
function isSorted(arr) {
var tell = true;
for (var i = 0; i < arr.length; i++) {
if (arr[i] > arr[i + 1]) {
tell = false;
}
}
return tell
}
答案 0 :(得分:1)
arr[i]
是迭代中数组的当前元素。 arr[i + 1]
是下一个元素。
您的if
声明所说的是&#34;如果当前元素大于下一个,请将tell
设置为false&#34; (因为这意味着数组未排序)。
此代码中存在一个错误的错误,因为它会查看超出数组末尾的元素。正确的实施将是:
function isSorted(arr) {
var tell = true;
for (var i = 0; i < arr.length - 1; i++) { // <-- loop up to the second-to-last element
if (arr[i] > arr[i + 1]) {
tell = false;
}
}
return tell
}
答案 1 :(得分:0)
arr [x]表示位于“x”
位置的数组中的对象因此,如果你的数组是[z,x,d,r],那么位置0的对象是“z”,位置1的对象是“x”,位置2的对象是“d”,对象位置3是“r”。所以arr [0]是“z”,arr [2]是“d”等等。
您的代码正在检查位置i
上的任何对象是否大于数组中的下一个对象(也就是位置i+1
处的对象)
答案 2 :(得分:0)
它说:
tell
标志设置为true,因此除非我们找到数组未排序的原因,否则我们将返回true作为答案。arr[i]
及其下一个元素arr[i+1]
,请执行以下检查:如果第一个元素大于下一个元素,则表示我们遇到类似[..., 3, 2,...]
的情况,所以我们知道数组没有排序。为表明这一点,我们将tell
标记设置为false
。答案 3 :(得分:0)
+1并不意味着值+ 1而是下一个元素。所以在第一个循环中,我是0.然后if检查,如果位置0处元素的值大于元素1(0 + 1)的值,则返回false。
答案 4 :(得分:0)
arr[i]
是索引i
的元素。 arr[i + 1]
是索引i + 1
的元素。它是下一个元素。
if 检查当前元素是否大于下一个元素。如果每个元素都大于下一个元素,那么这意味着数组按降序排序。如果您的数组是[8, 6, 5, 1]
,那么8 > 6 > 5 > 1
。如果您的数组是[8, 9, 5, 1]
,则不会对其进行排序,因为8 < 9 > 5 > 1
。