繁体   English   中英

当我在条件语句中使用相同的值时,为什么我的插入排序算法返回不同的值?

[英]Why does my algorthim for insertion sort return different values , when I use the same value in condition statement?

# 在第一种情况下,我将临时变量放入 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

而且我找不到传递这些值与为什么它的行为如此之间的任何区别。 我认为我正在使用相同的值。 这是我在该页面上的第一个问题,请善待我,祝你有美好的一天

因为在while循环的第一次迭代中 if 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 << " ";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM