Cześć mam pytanie dotyczące udoskonalenia sortowania bąbelkowego. Słyszałem, że jest możliwość zaimplementowania równoległego sortowania tylko nie do końca wiem jak to zrobić. Może mi ktoś wytłumaczyć na czym to polega? Ogólnie to szukam sposobu na zmniejszenie ilości zamian. Tutaj podsyłam dwa algorytmy i jak można wycisnąć coś więcej z nich :)
unsigned long long bubble3(double *d,unsigned long long N)
{
unsigned long long swaps=0;
int i,p,pmin,pmax;
pmin = 0;
pmax = N - 1;
pmin = 0;
pmax = N - 2;
do
{
p = -1;
for(i = pmin; i <= pmax; i++)
if(d[i] > d[i + 1])
{
swap(d[i], d[i + 1]);
p = i;
swaps++;
}
if(p < 0)
break;
pmax = p - 1;
p = -1;
for(i = pmax; i >= pmin; i--)
if(d[i] > d[i + 1])
{
swap(d[i], d[i + 1]);
p = i;
swaps++;
}
pmin = p + 1;
}
while(p >= 0);
return swaps;
}
unsigned long long bubbleSortPerf(double *t,unsigned long long N)
{
int zamiana=1,k=0;
unsigned long long licznik=0;
double schowek;
do
{
zamiana=0;
for (int i=k; i<N-1-k; i++)
{
if (t[i]>t[i+1])
{
zamiana++;
schowek=t[i];
t[i]=t[i+1];
t[i+1]=schowek;
licznik++;
}
}
zamiana=0;
for(int j=N-2-k; j>k; j--)
{
if (t[j]<t[j-1])
{
zamiana++;
schowek=t[j];
t[j]=t[j-1];
t[j-1]=schowek;
licznik++;
}
}
k++;
}
while(zamiana!=0);
return licznik;
}