Witajcie,

Mam pewien problem z sortowaniem quicksort. Mam napisać program który będzie sortował tablice, najpierw jak sprawdzamy elementy idąc od jednej strony, następnie idąc od początku i końca, a następnie wybierając sobie element względem którego będziemy sortowali poprzez medianę z końcowego, początkowego i środkowego elementu. Napisałem taki oto program i nie wiem dlaczego nie działa, już nie wiem co mogę poprawić więc proszę was o pomoc. Z góry dziękuje.

PS. Jakby coś było niejasne w kodzie to napiszcie to go lepiej skomentuję.

#include <iostream>
using namespace std;



void swap(int i, int j, int tab[])
{
int pom=tab[i];
tab[i]=tab[j];
tab[j]=pom;
}
//10 elementowa
int partition1(int L, int R, int *tab)//wtedy kiedy oba ida od lewej strony
{
	int m=L-1;
	int n;
	int x = tab[R];
	
	while (tab[m+1] < x) { m++; }
	
	while(1)
	{
		n=m+1;
		while(tab[n]>x)
		{n++;
		if(n<R)
		{
			swap(m+1,R,tab);
		}

		else return n;
	}
	}
}

int  partition2(int L, int R, int *tab) // wtedy kiedy jedno idzie od lewej a drugie od prawej
{
	int x=tab[L];
	int i = L-1;
	int j = R+1;
	while(1)
	{
		while(tab[j]<=x)
		{
			j--;
			break;
		}
		
		while(tab[i]>=x)
		{
			i--;
			break;
		}
		
		if(i<j)
		{
			swap(i,j,tab);
		}
		else return j;
	}

	
}

int partition3(int L, int R, int *tab)
{
	int l=tab[L];
	int r=tab[R];
	int temp=0;
	for (int i=L; i<=R; i++) {temp++;}
	int pom = temp/2;
	int m=tab[pom];
	int wartmod;
	if ((l>r && l<m) || (l>r && l<m)) wartmod=l;
	if ((r>m && r<l) || (r>l && r<m)) wartmod=r;
	if ((m>r && m<l) || (m>r && m<r)) wartmod=m;
	int x = tab[wartmod];

	partition1(L,R,tab);

	return wartmod;
}




void quicksort1(int L, int R, int *tab)
{
	if (L<=R)
	{
		int p;
		p = partition1(L,R,tab);
		quicksort1(L,p-1,tab);
		quicksort1(p+1,R,tab);
	}
}

void quicksort2(int L, int R, int *tab)
{
	if (L<R)
	{
		int p;
		p = partition2(L,R,tab);
		quicksort2(L,p-1,tab);
		quicksort2(p+1,R,tab);
	}
}

void quicksort3(int L, int R, int *tab)
{
	if (L<R)
	{
		int p;
		p = partition3(L,R,tab);
		quicksort3(L,p-1,tab);
		quicksort3(p+1,R,tab);
	}
}

int main()
{
	int tab[10] = {3,5,8,2,4,1,4,6,2,1};

	int L = 0;
	int R = 9;
	quicksort1(L,R,tab);
	quicksort2(L,R,tab);
	quicksort3(L,R,tab);

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

	system("pause");
	return 0;
}