尝试将这个简单的伪代码分解为java代码
for j <- 2 to n
do key <- A[j]
i <- j - 1
while i > 0 and A[i] > key
do A[i+1] <- A[i]
i <- i - 1
A[i + 1] = key
这只是一个插入排序示例,但我很困惑的是,在第一次执行此操作之后,“不做”的调用是什么。
到目前为止,我有这个:
for(int j = 2; j < arrayToSort.size(); j++)
{
int key, i;
do
{
key = arrayToSort.get(j);
i = j -1;
}while(i > 0 && arrayToSort.get(i) > key);
}
答案 0 :(得分:4)
实际上,您将while
循环与do-while
混淆。这里的第一个do
不是while
的一部分。所以,它不是do-while
循环。
它只是告诉在for
循环开始之前在while
循环中执行显示的赋值。
所以,等效的代码就像:
for (int j = 2; j < n; ++j) {
int key = A[j];
int i = j - 1;
while (i > 0 && A[i] > key) {
A[i+1] = A[i];
i = i - 1; // can be replaced with '--i'
}
A[i + 1] = key
}