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

C++ odcinek 14 - problem ze zrozumieniem

42 Warsaw Coding Academy
0 głosów
422 wizyt
pytanie zadane 29 grudnia 2017 w C i C++ przez niezalogowany

Witam

Bez owijania w bawełnę jak w temacie, kod jest zerżnięty 1:1 z filmu Pana Mirosława

#include <iostream>
#include <time.h>
#include <windows.h>

using namespace std;

int ile;
clock_t start,stop;
double czas;

void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while(tablica[i]<v) i++;
        while(tablica[j]>v) j--;
        if(i<=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while(i<=j);
    if(j>lewy) quicksort(tablica,lewy, j);
    if(i<prawy) quicksort(tablica, i, prawy);
}

int main()
{
    cout << "Porownanie czasow sortowania v.1" << endl;

    cout<<"Ile losowych liczb w tablicy: ";
    cin>>ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    //inicjowanie generatora
    srand(time(NULL));

    //wczytywanie losowych liczb do tablicy
    for(int i=0; i<ile; i++)
    {
        tablica[i] = rand()%100000+1;
    }

    //przepisanie tablicy do tablicy2
    for(int i=0; i<ile; i++)
    {
       tablica[i]=tablica[i];
    }


    cout<<endl<<"Sortuje teraz algorytmem quicksort. Prosze czekac!"<<endl;
    start = clock();
    quicksort(tablica, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout<<endl<<"Czas sortowania quicksort: "<<czas<<" s"<<endl;


       cout<<"Po posortowaniu: "<<endl;
        for(int i=0; i<ile; i++)
        {
            cout<<tablica[i]<<" ";
        }


    delete [] tablica;

    return 0;
}

    cout << "Porownanie czasow sortowania v.1" << endl;

    cout<<"Ile losowych liczb w tablicy: ";
    cin>>ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    //inicjowanie generatora
    srand(time(NULL));

    //wczytywanie losowych liczb do tablicy
    for(int i=0; i<ile; i++)
    {
        tablica[i] = rand()%100000+1;
    }

    //przepisanie tablicy do tablicy2
    for(int i=0; i<ile; i++)
    {
       tablica[i]=tablica[i];
    }


    cout<<endl<<"Sortuje teraz algorytmem quicksort. Prosze czekac!"<<endl;
    start = clock();
    quicksort(tablica, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout<<endl<<"Czas sortowania quicksort: "<<czas<<" s"<<endl;


       cout<<"Po posortowaniu: "<<endl;
        for(int i=0; i<ile; i++)
        {
            cout<<tablica[i]<<" ";
        }


    delete [] tablica;

    return 0;
}

Mam tu problem ze zrozumieniem

        if(i<=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }

Dlaczego mam zamieniać się tymi zmiennymi, jak bym dał po prostu i-- i j++ to na pierwsze oko nie trzeba by było tego zamieniać. Jednak jak coś tam szperam w tym miejscu to zawsze program dostaje "laga". Wyjaśni ktoś czemu trzeba zamieniać a nie działa od razu?

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Mówisz o tym?

x=tablica[i];
tablica[i]=tablica[j];
tablica[j]=x;

Ten kod zamienia miejscami elementy tablicy o indeksach i oraz j. Równie dobrze mógłbyś użyć funcji std::swap() z biblioteki standardowej.

Nie wiem czym są konkretnie zmienne i oraz j, nie wiem na co wskazują, ale może to co powiedziałem trochę uprości Ci rozumowanie. smiley

Podobne pytania

0 głosów
1 odpowiedź 513 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez barti22062 Początkujący (370 p.)
0 głosów
1 odpowiedź 181 wizyt
pytanie zadane 21 sierpnia 2024 w C i C++ przez RufinB Bywalec (2,020 p.)
0 głosów
1 odpowiedź 775 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez Wujek Początkujący (410 p.)

93,383 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,744 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...