InsertionSort

0

Napisałem algorytm sortowania ciągu elementów metoda insertionsort. Użyłem dynmicznego tworzenia tablicy... Niestety jest jakiś błąd.. Podczas komilowania nie wyskakują nawet ostrzeżenia.. dla kompilatora jest wszystko ok.. ale program nie sortuje.. Najprawdopodobniej jest błąd w zastosowaniu wskaźnika do tablicy i dynamicznych tworzeniu. Proszę o pomoc w znalezieniu błędu. dziękuję. Oto kod:

#include <iostream.h>
main()
{
int n,i,j,min,x;
cout<<"Program sortuje ciag n-elementowy przez wybieranie(selectionsort).\n";
cout<<"Podaj ilu elementowy jest ciag: ";
cin>>n;
int *wsk;
wsk = new int[n];
for(i=0;i<n;i++)
{
cout<<"Podaj element ciagu nr " <<i<<" : ";
cin>>wsk[i];
}
for(i=1;i<=(n-1);i++ )
{
min=1;
j= i+1;

while(j<=n)
	{
if (wsk[j]<wsk[min])
	{
	min=j;
	x=wsk[j];
	}

	}

wsk[min]=wsk[i];
wsk[i]=x;
}
cout<<"Ciag po sortowaniu ma postac: \n";
for(i=0;i<n;i++)
{
cout<< wsk[i]<<endl;
}

}

0

przyjrzy sie uwaznie petli:
while(j<=n)
{
if (wsk[j]<wsk[min])
{
min=j;
x=wsk[j];
}

            }

jest to petla, ktora nigdy sie nie skonczy, a jest uruchamiana wowczas, gdy podasz rozmiar tablicy wiekszy badz rowny 2... mozesz wstawic cout i sie przekonac

0

tak powinna wygladac cala druga petla for:
for(i=0;i<=(n-1);i++ )
{
min=i;
j= min+1;

    while(j<n)
        {
        if (wsk[j]>wsk[min])        // operujac znakami ">" i "<" mozesz sortowac
           {                                 // rosnaco badz malejaco
            x=wsk[j];
            for (int z=j-1;z>=min; z--)
                {
                wsk[z+1]=wsk[z];
                }
            wsk[min] = x;
            }
        j++;
        }

}

0

Dzięki wielkie. Zauważyłem po napisaniu listu, że dla n=1 wszystko jest ok...

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