Witam mam takie zadanie na zaliczenie. Jestem dopiero początkujący więc prosiłbym o wyrozumiałość :) Napisałem Quick sorta oczywiście z pomocami różnymi ale dzieli on tablice na dwie części a wykładowca chce abym ten element dzielący wylosował i nie mam pojęcia jak to wstawić bo ciągle błędy wyskakują różne i się trochę już gubię. Wiem że muszę wykorzystać Srand (time = NULL ) ale nie mam już pojęcia jak to wstawić czy muszę już przerobić całą funkcję czy jak?
O to mój kod:
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int partition(int tablica[], int pierwsza_cz, int druga_cz) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa
// mniejsze badz rowne x, w drugiej wieksze lub rowne od x
{
int x = tablica[pierwsza_cz]; // obieramy x
int i = pierwsza_cz, j = druga_cz, w;
while (true) // petla nieskonczona - wychodzimy z niej tylko przez return j
{
while (tablica[j] > x) // dopoki elementy sa wieksze od x
j--;
while (tablica[i] < x) // dopoki elementy sa mniejsze od x
i++;
if (i < j) // zamieniamy miejscami gdy i < j
{
w = tablica[i];
tablica[i] = tablica[j];
tablica[j] = w;
i++;
j--;
}
else // gdy i >= j zwracamy j jako punkt podzialu tablicy
return j;
}
}
void quicksort(int tablica[], int pierwsza_cz, int druga_cz) // sortowanie szybkie
{
int punkt_podzialu;
if (pierwsza_cz < druga_cz)
{
punkt_podzialu = partition(tablica,pierwsza_cz,druga_cz); // dzielimy tablice na dwie czesci;
quicksort(tablica, pierwsza_cz, punkt_podzialu); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy
quicksort(tablica, punkt_podzialu+1, druga_cz); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy
}
}
int main()
{
int ilosc_liczb, i;
cout << "Podaj ilosc liczb do posortowania: "<<endl;
cin >> ilosc_liczb;
int *tablica = new int [ilosc_liczb]; // utworzenie dynamicznej tablicy na 'ilosc_liczb' elementow
cout<<"Liczby losowe do sortowania: \n";
srand(time(NULL));
for (i = 0; i < ilosc_liczb; i++) // wczytywanie liczb do tablicy
{
tablica[i]=rand()%20;
cout<<tablica[i]<<"\n";
}
quicksort(tablica,0,ilosc_liczb-1); // wywolanie funkcji sortujacej
cout<<"Liczby posortowane:\n";
for (i = 0; i < ilosc_liczb; i++) // wypisanie posortowanej tablicy
cout << tablica[i] << endl;
system("pause");
return 0;
}