实现插入排序时答案的差异

问题描述 投票:0回答:1

我尝试使用while和for循环在C中实现插入排序,如下所示:

#include <stdlib.h>

int main()
{
    int a[]={4,7,8,2,16,21,12,3,1};
    int n=sizeof(a)/sizeof(a[0]);
    int j,k,i,x;
    /*for(j=0;j<n;j++)
    {
         k=a[j];
        for(i=j-1;i>=0 && k<a[i];i--)
                a[i+1]=a[i];
        a[i+1]=k;
    }*/
    for(i=1;i<n;i++)
    {
        k=a[i];
        j=i-1;
        while(j>=0 && a[j]>k)
        {
            a[j+1]=a[j];
            j=j-1;
        }
        a[j+1]=k;
    }
    printf("The elements of the array are: ");
    for(x=0;x<n;x++)
        printf("%d ", a[x]);
    return 0;
}

并且完全正常。但是,当我尝试删除变量“ k”的使用时。答案打印如下:enter image description here

我后面的代码如下:

#include <stdlib.h>

int main()
{
    int a[]={4,7,8,2,16,21,12,3,1};
    int n=sizeof(a)/sizeof(a[0]);
    int j,k,i,x;
    /*for(j=0;j<n;j++)
    {
         k=a[j];
        for(i=j-1;i>=0 && k<a[i];i--)
                a[i+1]=a[i];
        a[i+1]=k;
    }*/
    for(i=1;i<n;i++)
    {
        //k=a[i];
        j=i-1;
        while(j>=0 && a[j]>a[i])
        {
            a[j+1]=a[j];
            j=j-1;
        }
        a[j+1]=a[i];
    }
    printf("The elements of the array are: ");
    for(x=0;x<n;x++)
        printf("%d ", a[x]);
    return 0;
}

有人可以解释吗?在while循环期间是否有任何改变变量'i'的值。

c insertion-sort
1个回答
0
投票

[k=a[i]保存该值,因为while循环

while (...) {
   a[j+1] =a[j];
}

在第一次迭代时覆盖a[i],因为ji-1开始,所以j+1在第一次迭代时为i

© www.soinside.com 2019 - 2024. All rights reserved.