• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Partycjonowanie tablicy.

Object Storage Arubacloud
0 głosów
158 wizyt
pytanie zadane 4 września 2016 w C i C++ przez Rafał Gardian Początkujący (310 p.)

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.

komentarz 4 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
Nie bedzie latwiej i szybciej przy pomocy ifa, to pytanie dla zaawansowanych z Was

1 odpowiedź

+2 głosów
odpowiedź 4 września 2016 przez draghan VIP (106,230 p.)
wybrane 4 września 2016 przez Rafał Gardian
 
Najlepsza

1. Co to za przedziwna implementacja funkcji swap? Każda taka linijka to operacja arytmetyczna plus przypisanie, co daje w sumie przynajmniej sześć operacji. W porównaniu z utworzeniem zmiennej tymczasowej z jej inicjalizacją i wykonaniem dwóch podstawień wygląda to słabo. Poza tym istnieje już implementacja std::swap w bibliotece utility - skoro jest, to można skorzystać (implementacja w GCC6 również opiera się na zmiennej tymczasowej).

2. W wywołaniu funkcji part() podajesz jako prawą granicę indeks równy sześć - a Twoja tablica kończy się na piątym elemencie. Popraw to i powiedz, czy o to Ci chodziło.

komentarz 4 września 2016 przez Rafał Gardian Początkujący (310 p.)
ad.2 Dzięki, teraz działa. Coś słabo ze spostrzegawczością u mnie ostatnio.

Podobne pytania

+2 głosów
4 odpowiedzi 686 wizyt
0 głosów
1 odpowiedź 204 wizyt
pytanie zadane 12 stycznia 2017 w Systemy operacyjne, programy przez 0xf Dyskutant (8,180 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...