Разница в ответах при реализации вставки сортировки - PullRequest
0 голосов
/ 11 января 2020

Я попытался реализовать сортировку вставкой в ​​C, используя while и для l oop, следующим образом:

#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;
}

Может кто-нибудь объяснить это ?. Делает что-нибудь, изменяет значение переменной 'i' во время, пока l oop.

1 Ответ

0 голосов
/ 11 января 2020

k=a[i] сохраняет значение, потому что while l oop

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

перезаписывает a[i] на первой итерации, поскольку j начинается с i-1, поэтому j+1 равно i на первой итерации.

...