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?