Witam,
Od jakiegoś czasu uczę się programować w języku C++. Niedawno natrafiłem na pewien problem, a mianowicie na podstawie tego filmiku:
chciałem napisać algorytm szybkiego sortowania, jednak coś nie działa i sortowanie
w ogóle nie zachodzi. Proszę o pomoc i wyjaśnienie w czym jest problem. Z góry dziękuję!
Kod programu:
#include <iostream>
using namespace std;
void sortowanie(int *tab, int poczatek, int koniec);
int main()
{
int n=9;
int *tab;
tab = new int [n];
tab[0]=6;
tab[1]=1;
tab[2]=8;
tab[3]=4;
tab[4]=5;
tab[5]=2;
tab[6]=7;
tab[7]=3;
tab[8]=9;
for(int i=0; i<n; i++)
{
cout<<tab[i]<<" ";
}
sortowanie(tab,0,n-1);
cout<<"PO POSORTOWANIU: "<<endl;
for(int i=0; i<n; i++)
{
cout<<tab[i]<<" ";
}
delete [] tab;
return 0;
}
void sortowanie(int *tab, int poczatek, int koniec)
{
if(poczatek>=koniec)
return;
int p = (poczatek+koniec)/2;
int a=poczatek,b=poczatek,x;
//zamiana tab[p] z tab[koniec]
x=tab[koniec];
tab[koniec] = tab[p];
tab[p]=x;
while(true)
{
while(tab[a]>tab[p]) a++;
if(tab[a]<tab[p])
{
//swap(tab[a],tab[b]);
x=tab[b];
tab[b]=tab[a];
tab[a]=x;
a++;
b++;
}
else if((tab[a]==tab[p])&&(a!=koniec))
{
//zamiana tab[a] z tab[b]
x=tab[b];
tab[b]=tab[a];
tab[a]=x;
a++;
b++;
}
else if((tab[a]==tab[p])&&(a==koniec))
{
//zamiana tab[koniec] z tab[b]
x=tab[koniec];
tab[koniec]=tab[b];
tab[b]=x;
break;
}
}
}
PS. Na razie nie dodawałem rekurencji, ponieważ chciałem zobaczyć czy liczby choć zmienią swoje położenie po wykonaniu funkcji.