Implementazioni di algoritmi/Quicksort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 7:
===[[w:linguaggio C|C]]===
<source lang="C">
namespace { // namespace anonimo
void sort(int array[], int begin, int end) {
template<class T>
int pivot, l, r;
void if qSort(endT >*_x, beginT*_y) {
if(_x >= _y)
pivot = array[begin];
return;
l = begin + 1;
const T m = _x[(_y-_x)/2];
r = end+1;
T *x = _x; // just a copy
while(l < r)
T *y = _y;
if (array[l] < pivot)
while(true) {
l++;
while(*x < m && x < y) x++;
else {
while(*y > m && x < y || *x == *y) ry--;
if(x < y) {
swap(array[l], array[r]);
T t = *x;
}
*x = *y;
l--;
*y = t;
swap(array[begin], array[l]);
}
sort(array, begin, l);
else
sort(array, r, end);
break;
}
}
qSort(_x, x); // tutti gli elementi minori di m
qSort(x+1, _y); // tutti quelli maggiori uguali di m
}
}
 
template<class T>
void sort(intT array[]*x, int begin, int endsize) {
qSort(x, &x[size-1]); // passa a qSort il primo elemento e l'ultimo}
</source>