【发布时间】:2014-08-19 15:36:57
【问题描述】:
我有这个伪代码:
COMPARE-EXCHANGE(A,i,j)
if A[i] > A[j]
exchange A[i] with A[j]
INSERTION-SORT(A)
for j = 2 to A.length
for i = j-1 downto 1
COMPARE-EXCHANGE(A,i,i+1)
我将其解释为:
void insertSort( )
{
int tmp;
for( int j = 2 ; j < MAX ; ++j )
{
for( int i = j - 1 ; i > 0 ; --i )
{
if( unsortedArr[i] > unsortedArr[i + 1] )
{
tmp = unsortedArr[i];
unsortedArr[i] = unsortedArr[i + 1];
unsortedArr[i + 1] = tmp;
}
}
}
}
但是,这会跳过unsortedArr[0]。
这意味着它不会工作。
将第二个for 更改为:
for( int i = j - 1 ; i >= 0 ; --i )
将使其按预期运行。 伪代码有错误还是我第一次尝试解释错误?
【问题讨论】:
-
伪代码很可能使用 1 索引数组,而在 C++ 中数组是 0 索引。
标签: c++ algorithm array-algorithms