Nie działa mi poprawnie następujący program, mający partycjonować tablicę względem ostatniego elementu:
#include <iostream>
using namespace std;
void part( int * input, int l, int r );
int main()
{
int A[6]={12,97,13,42,50,29};
cout << "Tablica przed partycjonowaniem" << endl;
for(int i=0; i<6; ++i)
{
cout << A[i] << endl;
}
part(A,0,6);
cout << "Tablica po partycjonowaniu" << endl;
for(int i=0; i<6; ++i)
{
cout << A[i] << endl;
}
return 0;
}
/*************************************************************************************************************************************************************/
void swap(float &a, float &b)
{
a = a + b;
b = a - b;
a = a - b;
return;
}
/*************************************************************************************************************************************************************/
void part( int * input, int l, int r ) //partycjonuje wzgledem ostatniej liczby
{
int pivot = input[ r ];
while( l < r )
{
while( input[ l ] < pivot )
l++;
while( input[ r ] > pivot )
r--;
if( input[ l ] == input[ r ] )
l++;
else if( l < r )
{
swap(input[ l ],input[ r ]);
}
}
}
Tablica po partycjonowaniu powinna wyglądać tak, że elementy mniejsze od 29 są z lewej, a większe z prawej. Tymczasem po wywołaniu programu pojawia się tablica: 1,97,13, 42, 50, 29 (skąd w ogóle ta jedynka?!?!). Nie wiem czemu tak się dzieje. Byłbym wdzięczny jakby ktoś zerknął okiem i wskazał co zrobiłem nie tak.