You are on page 1of 7

Analiza empirică a algoritmilor

long nc, ns;


void bublesort(int *A, long n)
{ long i, k;
int t, f;
for (i=0; i<n-1; i++)
{ f=0;
for(k=0; k<n-1-i; k++)
{ nc++;
if(A[k]>A[k+1])
{ ns++;
t=A[k]; A[k]=A[k+1]; A[k+1]=t;
f=1;
}
}
if(f==0) break;
}
return;
}

void readArray(int* A, long n)


{long i;
puts("Enter elements:");
for(i=0; i<n; i++)
{
scanf("%d", &A[i]);
}
}
void showArray(int* A, long n)
{long i;
puts("Elements of array:");
for(i=0; i<n; i++)
{
printf("%d\t", A[i]);
}
printf("\n");
}

void formArrays(int* A, int* B, long n)


{long i;
srand(time (NULL));
for(i=0; i<n; i++)
{
A[i]=B[i]= rand()%100 -50;
}
return;
}

void sortedAscArray(int *A, int* B, long n)


{long i;
for(i=0; i<n; i++)
{
A[i]=B[i]= i+1 ;
}
return;
}
void sortedDscArray(int *A, int* B, long n)
{
long i;
for(i=0; i<n; i++)
{
A[i]=B[i]= n-i ;
}
return;
}

Functia main() (fragment)


#include<time.h>
#include"sortare.h"
int main()
{
int*A,*B;
long n;
...
clock_t t1, t2;
double t;
t1=clock();
bublesort(A,n); // qsort();
t2=clock();
t= (double)(t2-t1)/CLOCKS_PER_SEC;
...
}
long nc;
int sequential_search(int*A, long n, int key)
{ int i;
for(i=0; i<n; i++)
{ nc++;
if(A[i]==key)
{
return i;
}
}
return -1;
}

long nc;
int binary_search(int* A, long n, int key)
{long l, r, m;
l=0; r=n-1;
while(l<=r)
{m= (l+r)/2;
nc++;
if (key<A[m])
{ r=m-1;}
else if(key>A[m])
{ nc++; l=m+1;}
else {return m;}
}
return -1;
}
long l=0, r=n-1;
int binary_search_rec(int*A, long l, long r, int key)
{long m;
if(l>r) {return -1;}
m=(l+r)/2;
if(key<A[m])
{r=m-1;
binary_search_rec(A,l,r,key);
}
else if(key>A[m])
{l=m+1;
binary_search_rec(A,l,r,key);
}
else {return m;}
}

void shell_sort(int* A, long n)


{
long step, i, k;
int temp;
step=n/2;
while(step>0)
{
for(i=step; i<n; i++)
{
temp=A[i];
for(k=i; temp<A[k-step] && k>=step; k=k-step)
{ A[k]= A[k-step];}
A[k]=temp;
}
if(step==2)
step=1;
else
step=( long) step/2.2
}

void shell_sortasc (int *a, int n)


{
int h, i, j, t;
for (h = n; h /= 2;)
{
for (i = h; i < n; i++) {
t = a[i];
for (k = i; k >= h && t < a[j - h]; k -= h) {
a[k] = a[k - h];
}
a[k] = t;
}
}
return;
}
void qsort(void* A, long n, int sizel, int (*cmp)(const void* a, const void* b));

void*bsearch(void * v, void* A, long n, int sizel, int (*cmp)(const void* a,


const void* b));

nc=ns=0;
…..
qsort(A, n, sizeof(int), cmpi);

long nc, ns;

int cmpi(const void* a, const void* b)


{
int n1 = *(int *)a;
int n2 = *(int *)b;
nc++;
if(n1<n2) { return -1;}
else if (n1>n2) { nc++; ns++; return 1;}
else { nc++; return 0;}
}

You might also like