2

# 在第一种情况下,我将 temp 变量放入 while 循环中的条件语句#

  int tab[8]={0,1,7,8,7,6,5,2};
    int n=8;                
    int j;
    int temp;


    for(int i=1;i<n;i++)
    {
        temp=tab[i];
        j=i-1;

        while(j>=0&&tab[j]>temp)
        {
            tab[j+1]=tab[j];
            --j;    
        }
        tab[j+1] = temp;

    }

我得到的结果是:

0 1 7 8 7 6 5 2
0 1 2 5 6 7 7 8

但另一方面,当我在 while 循环的条件语句中使用 tab[i]

for(int i=1;i<n;i++)
{
    temp=tab[i];
    j=i-1;

    while(j>=0&&tab[j]>tab[i])
    {
        tab[j+1]=tab[j];
        --j;    
    }
    tab[j+1] = temp;

}

我得到这个结果:

0 1 7 8 7 6 5 2
0 1 7 7 6 5 2 8

而且我在传递这些值和它为什么会这样表现之间找不到任何区别。我认为我使用的是相同的值。这是我在那个页面上的第一个问题,请对我好一点,祝你有美好的一天

4

1 回答 1

0

因为在循环的第一次迭代中,while如果tab[j] > tab[i]

tab[j+1]=tab[j];更改tab[i]tab[i - 1],

所以基本上你在第二种情况下的整个程序相当于这个

#include <iostream>

int main ()
{
    int tab[8]={0,1,7,8,7,6,5,2};
    int n=8;                
    int j;
    int temp;


    for(int i=1;i<n;i++)
    {
        temp=tab[i];
        j=i-1;

        if (tab[j]>tab[i])
        {
            tab[j+1]=tab[j];
            --j;    
        }
        tab[j+1] = temp;

    }

    for(auto&& a: tab) {
        std::cout << a << " ";
    }
}
于 2020-01-16T17:28:20.900 回答