Professional Documents
Culture Documents
Codici Completo
Codici Completo
// SELECTION SORT
double search_min(double a[], int n){
int i, imin=0;
for(i=1;i<n;i++){ if(a[i]<a[imin]) imin=i; }
return imin; }
void swap(double *a, double *b){ double temp = *a; *a = *b; *b = temp; }
// INSERTION SORT
void insert_in_order(double a[], int n, double x){
int pos, i; for(pos=n; pos>0 && a[pos−1]>x; pos−−);
for(i=n−1; i>=pos; i−−){ a[i+1]=a[i]; }
a[pos]=x; }
void insertion_sort(double a[], int n){ int i; for(i=1; i<n; i++){ insert_in_order(a, i, a[i]); } }
// BUBBLE SORT
void swap(double *a, double *b){ double temp = *a; *a = *b; *b = temp; }
// MERGE SORT
void merge(double a1[], int n1, double a2[], int n2, double dest[]){
int pos1=0, pos2=0, k=0;
while(pos1<n1 && pos2<n2){
if(a2[pos2]<a1[pos1]) dest[k++] = a2[pos2++];
else dest[k++] = a1[pos1++]; }
while(pos1<n1){ dest[k++] = a1[pos1++]; }
while(pos2<n2){ dest[k++] = a2[pos2++]; } }
// QUICK SORT
void swap(double *a, double *b){ double temp = *a; *a = *b; *b = temp; }
#define GROWING_FACTOR 2
#define SHRINKING_FACTOR 4
typedef struct SArray{ double *item; int lenght; int size; }TArray;
typedef struct SQueue{ int elem_usati; int front; int back; int capacity; double *a; }TQueue;
TQueue queue_create(int capacity){ TQueue s; s.elem_usati=s.front=s.back=0; s.capacity=capacity;
s.a=malloc(sizeof(double)*capacity); return s; }
void queue_destroy(TQueue *queue){ queue−>elem_usati=queue−>capacity=0; free(queue−>a); }
void queue_add(TQueue *queue, double x){ queue−>a[queue−>back]=x; queue−>back++; queue−>elem_usati++; }
double queue_remove(TQueue *queue){ double x=queue−>a[queue−>front];
queue−>front=(queue−>front+1)%queue−>capacity; queue−>elem_usati−−; return x; }
double queue_front(TQueue *queue){ return queue−>a[queue−>front]; }
bool queue_is_empty(TQueue *queue){ return queue−>elem_usati==0; }
bool queue_is_full(TQueue *queue){ return queue−>elem_usati==queue−>capacity; }
// ALBERI RICORSIVE
typedef struct m_nodo{ int info; struct m_nodo *left; struct m_nodo *right; }t_nodo;
typedef t_nodo *t_albero;
int conta_foglie(t_albero a){ // N.B.: simile a somma info nodi; sostituire con commenti
if(a == NULL) return 0;
else if(a−>left == NULL && a−>right == NULL) return 1; // return a−>info
else{
int f_left = conta_foglie(a−>left); int f_right = conta_foglie(a−>right);
return f_left + f_right; /* + a−>info */ } }
typedef struct m_nodo{ int key; int value; struct m_nodo *link; }t_nodo;
typedef t_nodo *t_lista;
typedef struct m_THash{ int bucket_number; t_lista *bucket; }t_THash;