Sortowanie przez kopcowanie, pomija mi pierwszą liczę z zestawu.

0

Algorytm sortuje lecz pierwsza liczba zostaje na swoim miejscu. Może jestem ślepy, a błąd jest głupi. Proszę o pomoc, z góry dziękuję !

#include <iostream>

using namespace std;

int main()
{
    int ile, j, k, x;
    cin>>ile;

    int tab[ile+1];


    for (int i=0; i<ile; i++)
    {
        cin>>tab[i];
    }

    for ( int i=2; i<=ile; i++)
    {
        j=i;
        k=j/2;
        x=tab[i];
        while ((k>0)&&(tab[k]<x))
        {
            tab[j]=tab[k];
            j=k;
            k=j/2;
        }
        tab[j]=x;
    }

    int m;

    for (int i=ile; i>1; i--)
    {
        swap (tab[1], tab[i]);
        j=1;
        k=2;

        while (k<i)
        {
            if((k+1<i)&&(tab[k+1]>tab[k]))
                m=k+1;
            else
                m=k;
            if (tab[m]<=tab[j])
                break;
            swap(tab[j],tab[m]);
            j=m;
            k=j+j;
        }
    }

    for ( int i=0; i<ile; i++)
    {
        cout<<tab[i]<<" ";
    }

    return 0;
}
 
0

gubisz sam siebie przez te +1 i nie takie same warunki

na przykladzie niech ile bedzie 5

wiec bedzie tak

int tab[5+1]; 

tworzysz szescio elementowa tablice (0,1,2,3,4,5)

for (int i=0; i<5; i++) 

wiec tutaj bedziesz uzupelnial liczby tylko do 5tego elemenu (0,1,2,3,4)

for ( int i=2; i<=ile; i++)

wiec zacznij sprawdzac od TRZECIEGO elementu (0,1,2) do szostego (5) ktory nigdy nie byl wypelniony i znajduja sie w nim smieci

for (int i=ile; i>1; i--) 

idz od szostego elementu do trzeciego

wiec jak widzisz, warunki w petli i deklaracja tablicy nie jest najbardziej trafiona

1 użytkowników online, w tym zalogowanych: 0, gości: 1