【发布时间】:2019-04-03 16:10:32
【问题描述】:
所以这是我正在尝试使用的代码 sn-p。
function* genBubble(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
yield arr; // returning arr after every iteration
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1); // removed swap for brevity
}
}
}
}
const tempArray = [3, 5, 8, 4, 1, 9, -2];
const genForLoop = genBubble(tempArray);
do {
console.log(genForLoop.next());
} while (!genForLoop.next().done);
这是一个简单的冒泡排序实现。如您所知,冒泡排序有n * (n - 1) / 2 迭代,所以在这种情况下,数组的长度为7,我们有7 * (7 - 1) / 2 迭代等于21。
但是当我运行这段代码时,我只会得到11 迭代。输出如下图。
{ value: [ 3, 5, 8, 4, 1, 9, -2 ], done: false }
{ value: [ 3, 5, 8, 4, 1, 9, -2 ], done: false }
{ value: [ 3, 5, 4, 1, 8, 9, -2 ], done: false }
{ value: [ 3, 5, 4, 1, 8, -2, 9 ], done: false }
{ value: [ 3, 4, 5, 1, 8, -2, 9 ], done: false }
{ value: [ 3, 4, 1, 5, 8, -2, 9 ], done: false }
{ value: [ 3, 4, 1, 5, -2, 8, 9 ], done: false }
{ value: [ 3, 1, 4, 5, -2, 8, 9 ], done: false }
{ value: [ 1, 3, 4, -2, 5, 8, 9 ], done: false }
{ value: [ 1, 3, -2, 4, 5, 8, 9 ], done: false }
{ value: [ 1, -2, 3, 4, 5, 8, 9 ], done: false }
我正在使用node test.js 运行这个程序(test.js 是写入这个程序的文件)。
注意:我不想在每次迭代后打印数组。我想退货。如果有帮助的话。
【问题讨论】:
-
您的
do ... while循环在每次迭代中调用.next()函数两次。 -
哇,确实如此。如何只调用一次,同时检查是否已完成?
-
x = genForLoop.next();在循环内? -
将返回值存储在一个变量中,然后在
while条件下检查这个变量。事实上,.next()是一个调用,而不是一个值。 -
如何只调用一次,同时检查是否完成? 删除
do..while正文或只使用空的while循环
标签: javascript iteration generator bubble-sort yield-keyword