首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是不是把这个伪码解释错了?

我是不是把这个伪码解释错了?
EN

Stack Overflow用户
提问于 2014-06-28 19:36:05
回答 3查看 276关注 0票数 2

我有个伪码:

代码语言:javascript
运行
复制
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)

我将把它解释为:

代码语言:javascript
运行
复制
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更改为:

代码语言:javascript
运行
复制
for( int i = j - 1 ; i >= 0 ; --i )

会使它按预期运行。伪码有错吗?还是我第一次试着解释错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-28 19:40:57

然而,这将跳过unsortedArr。这意味着它不起作用。

在C/C++中,伪码将数组元素从1 (而不是从0)编号几乎是通用的。

将第二项改为: 对于( int =j-1;i >= 0;-i) 会使它按预期运行。

这还不够:您还需要在j上启动1而不是外部循环中的2

还请注意,C++标准库提供了一个std::swap函数,负责为您交换数组的元素:

代码语言:javascript
运行
复制
if( unsortedArr[i] > unsortedArr[i + 1] )
{
    std::swap(unsortedArr[i], unsortedArr[i+1]);
}
票数 4
EN

Stack Overflow用户

发布于 2014-06-28 19:38:40

我认为您的伪代码假设数组从索引1开始--在C& C++中,从0开始。

票数 3
EN

Stack Overflow用户

发布于 2014-06-28 19:38:47

我猜想伪代码使用的是基于1的索引,而不是C++使用的基于0的索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24470237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档