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.