_Achille
Utente Èlite
- Messaggi
- 3,067
- Reazioni
- 725
- Punteggio
- 131
Salve ragazzi. Devo creare un Quicksort (in realtà no, ma devo adattarlo a un puntatore a funzione bool che sostituirà le condizioni per poterlo adattare ad un ordinamento crescente o decrescente), ho creato una classe ma non funzionava, quindi per testare il codice ho preferito riportarlo in un unico file molto semplificato. Il codice è questo:
Per funzionare funziona, ma solo la prima passata. 37 raggiunge il suo punto, ma poi la funzione termina senza invocarsi in modo ricorsivo come previsto (o almeno, non noto altri cambiamenti). Nel normale progetto il codice è leggermente più ordinato (funzione swapArray e swapInteger) ma questo è solo per test.
L'output è quello prevedibile manualmente per la prima passata: 12, 2, 6, 4, 10, 8, 37, 89, 68, 45.
Codice:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::setw;
#include <cstdlib>
void quickSort(int [], const size_t);
void partition(int [], const size_t, const size_t);
int main()
{
int num[] = {37, 2, 6, 4, 89, 8, 10, 12, 68, 45};
size_t size = sizeof(num)/sizeof(int);
quickSort(num, size);
for(int i=0; i<size; i++)
cout << num[i] << setw(3);
}
void quickSort(int array[], const size_t arraySize)
{
if(arraySize>1)
partition(array, 0, arraySize);
}
void partition(int array[], const size_t begin, const size_t end)
{
int i=end;
int pos=begin;
int temp;
while(i!=pos)
{
if(i>pos)
{
if(array[pos]>array[i])
{
temp=array[pos];
array[pos]=array[i];
array[i]=temp;
temp=pos;
pos=i;
i=temp;
}
--i;
}
else {
if(array[pos]<array[i])
{
temp=array[pos];
array[pos]=array[i];
array[i]=temp;
temp=pos;
pos=i;
i=temp;
}
++i;
}
}
if(begin>end) {
partition(array, begin, pos-1);
partition(array, pos, end);
}
return;
}
Per funzionare funziona, ma solo la prima passata. 37 raggiunge il suo punto, ma poi la funzione termina senza invocarsi in modo ricorsivo come previsto (o almeno, non noto altri cambiamenti). Nel normale progetto il codice è leggermente più ordinato (funzione swapArray e swapInteger) ma questo è solo per test.
L'output è quello prevedibile manualmente per la prima passata: 12, 2, 6, 4, 10, 8, 37, 89, 68, 45.