====== Algoritmi di Ordinamento ======
Autore: **//Santo Patti//**
In questa sezione sono implementati in c alcuni degli algoritmi di ordinamento più noti.
==Insertion Sort==
Complessità nel caso migliore O(//n//), nel caso peggiore O(//n//²)
int insertionsort(float *A, int length)
{
if (length<=0) return 1;
float key;
int i,j;
for (j=1; j < length; j++)
{
key=A[j];
i=j-1;
while ((i>=0)&&(A[i]>key))
A[i+1]=A[i--];
A[i+1]=key;
}
return 0;
}
==Merge Sort==
Complessità nel caso migliore O(//n//log//n//), nel caso peggiore O(//n//log//n//)
void merge(float *AV, int p, int q, int r)
{
/* Crea il vettore ordinato risultato ponendo via via il
* numero più piccolo che si trova in cima ad uno dei due
* array di input */
float vect[maxvect]; //array temporaneo
int bx=0; //puntatore all'array vect
int cx=p; //puntatore al primo array AV[p..q]
int dx=q+1; //puntatore al secondo array AV[q+1..r]
// creo l'array ordinato in vect!
while ((cx <= q )&&(dx <= r))
{
if (AV[cx] < AV[dx])
vect[bx++]=AV[cx++];
else
vect[bx++]=AV[dx++];
}
// A questo punto o il primo o il secondo array è completamente vuoto!
while (cx <= q)
vect[bx++]=AV[cx++];
while (dx <= r)
vect[bx++]=AV[dx++];
// qui copiamo il nuovo array al suo posto
for (cx=0; cx
==Quick Sort==
Complessità nel caso migliore O(//n//log//n//), nel caso peggiore O(//n//log//n//).
void quicksort(float *A, int p, int r)
{
if (px)&&(j>p));
do
i++;
while ((A[i]
==Counting Sort==
Complessità nel caso migliore O(//n//+2^//k//), nel caso peggiore O(//n//+2^//k//).
int chk(int *A, int n)
{
int j;
for (j=0; j < n; j++)
if (A[j]<1) return 0;
return 1;
}
int countings(int *A, int lA, int *B, int k)
{
if (!chk(&A[0],lA)) return 1;
int i;
int *C = new int (k); //Allocazione dinamica dell'array C
for (i=0; i < k; i++)
C[i]=0;
for (i=0; i < lA; i++)
C[A[i]-1]=C[A[i]-1]++;
for (i=1; i < k; i++)
C[i]=C[i] + C[i-1];
for (i=lA-1; i>-1; i--)
{
B[C[A[i]-1]-1]=A[i];
C[A[i]-1]--;
}
delete[] C;
return 0;
}