grazie slimmy, ecco heapsort e quicksort, ho anche messo la funzione swap che può essere usata col tuo.. appena ho tempo spiego per bene il tutto
Codice:
///////// HEAPSORT /////////////////////////
void heapify ( int* A , int newnode )
{
int done=0, dad, temp;
dad = ( newnode - 1 ) / 2;
while( dad >= 0 && !done)
{
if(A[newnode] > A[dad])
{
temp = A[newnode];
A[newnode]=A[dad];
A[dad]=temp;
newnode = dad;
dad = dad/2;
}
else
done = 1;
}
}
void heapsort ( int* A, int last )
{
int i,temp;
while(last > 0 )
{
temp = A[0];
A[0]=A[last];
A[last]= temp;
for(i=0;i<last;i++) heapify(A,i);
last--;
}
}
////////////////////////////////////////////////////////////
Codice:
///////// QUICKSORT ////////////////////////////////////
void swap (int& a, int& b) {
int temp = 0;
temp = a;
a = b;
b = temp;
};
void quicksort (int* A, int left, int right) {
int i = 0, j = 0, pivot = 0;
i = left;
j = right;
pivot = A[(left + right) / 2];
do {
while (A[i] < pivot)
i++;
while (A[j] > pivot ) j--;
if (i <= j) {
swap (A[i], A[j]);
i++;
j--;
};
}
while (!(i > j));
if (left < j) // Se 'left' è minore di 'j' allora
quicksort(A, left, j);
if (i < right) // Se 'i' è minore di 'right' allora
quicksort(A, i, right);
};
////////////////////////////////////////////////////////////
per usare l'heapsort si deve prima chiamare heapify dalla fine all'inizio dell'array così:
Codice:
cout << "\n\nHeapsort\nArray di partenza:\n";
for (c=0; c<SIZE; c++) {A[c]=array[c]; cout<<A[c]; cout<<" ";}
for(c=0;c<SIZE;c++) heapify(A,c);
cout << "\nHeap:\n";
for (c=0; c<SIZE; c++) {cout<<A[c]; cout<<" ";}
heapsort(A, SIZE-1);
cout << "\nArray ordinato:\n";
for (c=0; c<SIZE; c++) {cout<<A[c]; cout<<" ";}
questo invece per il quicksort
Codice:
cout << "\n\nQuicksort\nArray di partenza:\n";
for (c=0; c<SIZE; c++) {A[c]=array[c]; cout<<A[c]; cout<<" ";}
quicksort(A, 0,SIZE-1);
cout << "\nArray ordinato:\n";
for (c=0; c<SIZE; c++) {cout<<A[c]; cout<<" ";}