我有这个伪代码:

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而不是从0开始对数组元素编号几乎是通用的,就像在C / C++中一样

这还不够:您还需要从j开始1而不是在外循环中启动2
还要注意,C++标准库提供了std::swap函数,该函数负责为您交换数组的元素:

if( unsortedArr[i] > unsortedArr[i + 1] )
{
    std::swap(unsortedArr[i], unsortedArr[i+1]);
}

关于c++ - 我把这个伪代码解释错了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24470237/

10-13 07:38