riemann_01
07-06-2006, 16:57
Ciao a tutti!
Per quale motivo il seguente algoritmo di ordinamento, da me scritto, non funziona correttamente? Non riesco a trovare l'errore. Chi puo' darmi una mano? Grazie in anticipo!!
// quicksort.cc
#include <iostream>
using namespace std;
template <class T>
inline void my_swap(T& x, T& y)
{
T temp = x;
x = y;
y = temp;
}
template <class T>
void fill(T* seq, int size)
{
for(; size > 0; --size, ++seq)
cin >> *seq;
}
template <class T>
void print(T *seq, int size)
{
for(; size > 0; --size, ++seq)
cout << *seq << endl;
}
// trova l'elemento di confronto
template <class T>
T find_pivot(T* lm, T* rm)
{
T val = *(lm + (rm - lm) / 2);
return val;
}
// effettua la partizione
template <class T>
T* partition(T* lm, T* rm, T pivot)
{
while(lm < rm) {
while(*lm < pivot)
++lm;
while(*rm > pivot)
--rm;
if(lm < rm) {
my_swap(*lm,*rm);
++lm;
--rm;
}
}
return lm;
}
// algoritmo di ordinamento
template <class T>
void quicksort(T* seq, T* lm, T* rm)
{
T pvt = find_pivot(lm,rm), *p;
if(lm < rm) {
p = partition(lm,rm,pvt);
quicksort(seq,lm,p-1);
quicksort(seq,p+1,rm);
}
}
// prova
int main()
{
int a[10];
cout << "Insert 10 integers (to confirm press ENTER)\n";
fill(a,10);
cout << "Sorted sequence\n";
quicksort(a,&a[0],&a[10-1]);
print(a,10);
}
Insert 10 integers (to confirm press ENTER)
100
10
200
-100
-200
-101
100
-23
0
23
Sorted sequence
-200
10
-101
-100
-23
0
23
100
100
200
----------------------------------------------
Program exited successfully with errcode (0)
Press the Enter key to close this terminal ...
Per quale motivo il seguente algoritmo di ordinamento, da me scritto, non funziona correttamente? Non riesco a trovare l'errore. Chi puo' darmi una mano? Grazie in anticipo!!
// quicksort.cc
#include <iostream>
using namespace std;
template <class T>
inline void my_swap(T& x, T& y)
{
T temp = x;
x = y;
y = temp;
}
template <class T>
void fill(T* seq, int size)
{
for(; size > 0; --size, ++seq)
cin >> *seq;
}
template <class T>
void print(T *seq, int size)
{
for(; size > 0; --size, ++seq)
cout << *seq << endl;
}
// trova l'elemento di confronto
template <class T>
T find_pivot(T* lm, T* rm)
{
T val = *(lm + (rm - lm) / 2);
return val;
}
// effettua la partizione
template <class T>
T* partition(T* lm, T* rm, T pivot)
{
while(lm < rm) {
while(*lm < pivot)
++lm;
while(*rm > pivot)
--rm;
if(lm < rm) {
my_swap(*lm,*rm);
++lm;
--rm;
}
}
return lm;
}
// algoritmo di ordinamento
template <class T>
void quicksort(T* seq, T* lm, T* rm)
{
T pvt = find_pivot(lm,rm), *p;
if(lm < rm) {
p = partition(lm,rm,pvt);
quicksort(seq,lm,p-1);
quicksort(seq,p+1,rm);
}
}
// prova
int main()
{
int a[10];
cout << "Insert 10 integers (to confirm press ENTER)\n";
fill(a,10);
cout << "Sorted sequence\n";
quicksort(a,&a[0],&a[10-1]);
print(a,10);
}
Insert 10 integers (to confirm press ENTER)
100
10
200
-100
-200
-101
100
-23
0
23
Sorted sequence
-200
10
-101
-100
-23
0
23
100
100
200
----------------------------------------------
Program exited successfully with errcode (0)
Press the Enter key to close this terminal ...