You are on page 1of 25

/* Vectori */ #include <iostream> #include <time.

h> using namespace std; int b[100000]={7,2,5,9,4,10,12,3,15,20},m=10; int r[100000]; void citire(int [], int &); void generare(int [], int &); void generare_cresc(int [], int &); void afisare(int [], int); void inter(int, int, int); // cautare bool cautare(int [], int, int ); bool binarySearch(int [], int, int ); // sortare // O(n^2) - lab void bubbleSort(int [], int); // vezi in carte void ShellSort(int [], int); void inserare(int [], int); // vezi in carte void selectie(int [], int); // vezi in carte // O(n * log n) void quickSort(int , int);

void mergeSort(int , int); void heapSort(int [], int); // O(n) void countSort(int [], int); // vezi in carte void bucketSort(int [], int); //radixSort int partitie(int, int); int main(){ int a[100000],n; srand(time(NULL)); // generare(b,m); afisare(b,m); quickSort(0,m-1); afisare(b,m); } // citire vector void citire(int a[], int &n){ cin >> n; for(int i=0;i<n;i++) cin >> a[i]; } // afisare vector void afisare(int a[], int n){ cout << endl; for(int i=0;i<n;i++) cout << a[i] << " ";

} // generare vector void generare(int a[], int &n){ n = 30000; for(int i=0;i<n;i++) a[i]=rand()%1000; } // generare vector cresc void generare_cresc(int a[], int &n){ n = 9; a[0]=rand()%10; for(int i=1;i<n;i++) a[i]=a[i-1]+rand()%10; } // // // // cautare secventiala 1. Cazul cel mai favorabil: O(1) 2. Cazul cel mai nefavorabil (nu este): O(n) 3. Cazul mediu: O(n)

bool cautare(int a[], int n, int x){ for(int i=0;i<n;i++) if (a[i]==x) return true; return false; } // // // // cautare binara 1. Cazul cel mai favorabil: O(1) 2. Cazul cel mai nefavorabil (nu este): O(log n) 3. Cazul mediu: O(log n)

bool binarySearch(int a[], int n, int x){ int st,dr,m; // init

st=0; dr=n-1; while (st<=dr){// cat timp mai am sansa sa il gasesc m=(st+dr)/2; if (a[m]==x) // gasit!!! return true; else if (x<a[m]) // caut la stanga dr=m-1; else st=m+1;// caut la dreapta } return false; } // bublle sort void bubbleSort(int a[], int n){ int t; for(int k=1;k<=n-1;k++) for(int i=0;i<n-1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1]; a[i+1]=t;} } // Shell sort void ShellSort(int a[], int n){ int t; for(int gap=n/2;gap>=1;gap--) for(int i=0;i<n-gap;i++) if (a[i]>a[i+gap]) { t=a[i];a[i]=a[i+gap]; a[i+gap]=t;} }

// sortare prin interclasare void mergeSort(int st, int dr){ if (st<dr) { // daca am cel putin 1 element de sortat int m=(st+dr)/2; mergeSort(st,m); mergeSort(m+1,dr); inter(st,m,dr); } } void inter(int st, int m, int dr){ int k,i,j; i=st; j=m+1; k=0; while((i<=m)&&(j<=dr)) if (b[i]<b[j]) r[k++]=b[i++]; else r[k++]=b[j++]; while(i<=m) r[k++]=b[i++]; while(j<=dr) r[k++]=b[j++]; } for(i=0;i<k;i++) b[i+st]=r[i];

void quickSort(int st, int dr){ int p; if (st<dr){ p=partitie(st,dr); quickSort(st,p); quickSort(p+1,dr);

int partitie(int st, int dr){ int x,t,i,j; i=st; j=dr; x=b[st]; while(i<j){ // pana nu s-au intalnit while ((i<=dr)&&(b[i]<x)) i++; // plimba i-ul pe primul 1 while ((j>=st)&&(b[j]>x)) j--;// plimba j-ul pe primul 0 if (i<j){ // daca e cazu', schimba t=b[i]; b[i]=b[j]; b[j]=t; } } } return j;

// 0 0 1 1 0 1 0 1 #include <iostream> using namespace std; int a[20]={0,0,1,1,0,1,0,1,1,1,0,1}, n=12; // citire vector void citire(int a[], int &n){ cin >> n; for(int i=0;i<n;i++) cin >> a[i]; } // afisare vector void afisare(int a[], int n){ cout << endl; for(int i=0;i<n;i++) cout << a[i] << " "; } void f(){ int i,j; i=0;j=n-1; // incep de la capete while(i<j){ // pana nu s-au intalnit while ((i<n)&&(a[i]==0))i++; // plimba i-ul pe primul 1 while ((j>=0)&&(a[j]==1))j--;// plimba j-ul pe primul 0 if (i<j){ // daca e cazu', schimba a[i]=0; a[j]=1; } i++;j--; } } int main(){ afisare(a,n); f(); afisare(a,n); }

/* templates */ #include <iostream> using namespace std; template <class T> T minim(T a, T b){ if (a<b) return a; else return b; } int main(){ cout << minim(3,5); }

/* templates */ #include <iostream> using namespace std; // citire vector template <class T> void citire(T a[], int &n){ cin >> n; for(int i=0;i<n;i++) cin >> a[i]; } // afisare vector template <class T> void afisare(T a[], int n){ cout << endl; for(int i=0;i<n;i++) cout << a[i] << " "; } int main(){ char a[100][100]; int n; citire(a,n); afisare(a,n); }

/* templates */ #include <iostream> using namespace std; // citire vector template <class T> void citire(T a[], int &n){ cin >> n; for(int i=0;i<n;i++) cin >> a[i]; } // afisare vector template <class T> void afisare(T a[], int n){ cout << endl; for(int i=0;i<n;i++) cout << a[i] << " "; } // Shell sort template <class T> void ShellSort(T a[], int n){ int t; for(int gap=n/2;gap>=1;gap--) for(int i=0;i<n-gap;i++) if (a[i]>a[i+gap]) { t=a[i];a[i]=a[i+gap]; a[i+gap]=t;} } int main(){ char a[100];

int n; citire(a,n); ShellSort(a,n); afisare(a,n);

/* templates */ #include <iostream> using namespace std; template <class T> struct pereche{ T a,b; }; template <class T> void citire(pereche <T> &p){ cin >> p.a >> p.b; } template <class T> void afisare(pereche <T> p){ cout << endl << "("<< p.a << ","<< p.b<< ")"; }

int main(){ pereche <float> p; citire(p); afisare(p); }

/* templates */ #include <iostream> using namespace std; template <class T1, class T2> struct pereche{ T1 a; T2 b; }; template <class T1, class T2> void citire(pereche <T1, T2> &p){ cin >> p.a >> p.b; } template <class T1, class T2> void afisare(pereche <T1, T2> &p){ cout << p.a << " " << p.b; } int main(){ pereche <char, float> p; citire(p); afisare(p); }

/* vector v1 - vector grupat intr-o structura */ #include <iostream> using namespace std; struct vector{ int a[100]; int n; }; void citire(vector &v){ cin >> v.n; for(int i=0;i<v.n;i++) cin >> v.a[i]; } void afisare(vector v){ cout << endl; for(int i=0;i<v.n;i++) cout << v.a[i] << " "; } int main(){ vector v; // // } aloca(v); citire(v); afisare(v); dealoca(v);

/* vector v2 - vector grupat intr-o structura + template */ #include <iostream> using namespace std; template <class T> struct vector{ T a[100]; int n; }; template <class T> void citire(vector <T> &v){ cin >> v.n; for(int i=0;i<v.n;i++) cin >> v.a[i]; } template <class T> void afisare(vector <T> v){ cout << endl; for(int i=0;i<v.n;i++) cout << v.a[i] << " "; } int main(){ vector <char > v; // // aloca(v); citire(v); afisare(v); dealoca(v);

/* vector v3 - vector grupat intr-o structura + template + alocare dinamica */ #include <iostream> using namespace std; template <class T> struct vector{ T *a; int n; }; template <class T> void aloca(vector <T> &v){ v.a = new T[v.n]; } template <class T> void dealoca(vector <T> &v){ delete [] v.a ; } template <class T> void citire(vector <T> &v){ cin >> v.n; aloca(v); for(int i=0;i<v.n;i++) cin >> v.a[i]; } template <class T> void afisare(vector <T> v){ cout << endl;

for(int i=0;i<v.n;i++) cout << v.a[i] << " "; } int main(){ vector <int> v; citire(v); afisare(v); dealoca(v); }

/* vector v3 - vector grupat intr-o structura + template + alocare dinamica */ #include <iostream> using namespace std; template <class T> struct vector{ T *a; int n; }; template <class T> void aloca(vector <T> &v){ v.a = new T[v.n]; } template <class T> void dealoca(vector <T> &v){ delete [] v.a ; } template <class T> void citire(vector <T> &v){ cin >> v.n; aloca(v); for(int i=0;i<v.n;i++) cin >> v.a[i]; } template <class T> void afisare(vector <T> v){

cout << endl; for(int i=0;i<v.n;i++) cout << v.a[i] << " ";

template <class T> int partitie(vector <T>&v, int st, int dr){ int i,j,x; i=st;j=dr; x=v.a[st]; while (i<j){ while ((i<=dr)&&(v.a[i]<x)) i++; while ((j>=st)&&(v.a[j]>x)) j--; if (i<j){int t=v.a[i]; v.a[i]=v.a[j]; v.a[j]=t;} } return j; } template <class T> void Qsort(vector <T>&v,int st, int dr){ int p; if (st<dr){ p=partitie(v,st,dr); Qsort(v,st,p); Qsort(v,p+1,dr); } } int main(){ vector <int> v; citire(v);

Qsort(v,0,v.n-1); afisare(v); dealoca(v); }

/* vector v3 - vector grupat intr-o structura + template + alocare dinamica */ #include <iostream> using namespace std; template <class T> struct vector{ T *a; int n; }; template <class T> void aloca(vector <T> &v){ v.a = new T[v.n]; } template <class T> void dealoca(vector <T> &v){ delete [] v.a ; } template <class T> void citire(vector <T> &v){ cin >> v.n; aloca(v); for(int i=0;i<v.n;i++) cin >> v.a[i]; } template <class T> void afisare(vector <T> v){

cout << endl; for(int i=0;i<v.n;i++) cout << v.a[i] << " ";

template <class T> int partitie(vector <T>&v, int st, int dr){ int i,j,x; i=st;j=dr; // v.a[st] <-> v.a[st+rand()%(dr-st+1)] x=v.a[st]; while (i<j){ while ((i<=dr)&&(v.a[i]<x)) i++; while ((j>=st)&&(v.a[j]>x)) j--; if (i<j){int t=v.a[i]; v.a[i]=v.a[j]; v.a[j]=t;} } return j;

template <class T> void Qsort(vector <T>&v,int st, int dr){ int p; if (st<dr){ p=partitie(v,st,dr); Qsort(v,st,p); Qsort(v,p+1,dr); } } int main(){ vector <int> v;

citire(v); Qsort(v,0,v.n-1); afisare(v); dealoca(v); }

You might also like