Sunteți pe pagina 1din 9

#include<stdio.

h>

void Citire(int *n, int **a)

scanf("%d", n);

*a = malloc((*n + 1) * sizeof(int));

int i;

for (i = 1;i <= *n;i++)

scanf("%d", *a + i);

void QuickSort(int *a, int st,int dr)

if (st<dr)

int mij=(st+dr)/2;

int aux=a[st];

a[st]=a[mij];

a[mij]=aux;//interschimbam valoarea de pe pozitia 1 cu valoarea de pe pozitia mijloc

int i=st;

int j=dr;

int d=0;

while (i<j)

{
if (a[i]>a[j])

aux=a[i];

a[i]=a[j];

a[j]=aux;//interschimbam valorile, daca interschimbam marim i-ul, ne luam o variabila int d=0

d=1-d;//daca noi nu am interschimbat valoarea, este 1;o sa scadem din d j-ul;

i=i+d;

j=j-(1-d);//daca am facut o interschimbare inseamna ca d-ul nostru este 0, daca nu e necesara


interschimbarea micsoram j-ul cu 1;daca apare o interschimbare marim i cu 1;

QuickSort(a,st, i-1);

QuickSort(a, i+1, dr);//o sa se opreasca while cand i=j

int main()

int n, *a, i;

Citire(&n, &a);

QuickSort(a, 1, n);

for( i=1; i<=n; i++)

printf("%d ", a[i]);

return 0;

}
#include<stdio.h>

void Citire(int *n, int **a)

scanf("%d", n);

*a = malloc((*n + 1) * sizeof(int));

int i;

for (i = 1;i <= *n;i++)

scanf("%d", *a + i);

///daca prima jum a tabloului are elementele sortate si a doua jum are elem sortate, prin interclasare se
va obtine tabloul sortat

void MergeSort(int *a, int st, int dr, int n)

if (st<dr)

int mij=(st+dr)/2;

MergeSort(a, st, mij, n);

MergeSort(a, mij+1, dr, n);

///interclasare a 2 vectori
int i=st;//impart vectorul in 2 vectori ordonati crescator

int j=mij+1;

int k=0;

int *x;

*x=malloc(n*sizeof(int));

while (i<=mij && j<=dr)//nu am ajuns la capatul vectorului

if (a[i]<a[j])

k++;

x[k]=a[i];

i++;

else

k++;

x[k]=a[j];

j++;

while (i<=mij)

k++;

x[k]=a[i];

i++;

while (j<=dr)

k++;
x[k]=a[j];

j++;

for (i=st,j=1;i<=dr;i++,j++)

a[i]=x[j];

int main()

int n, *a, i;

Citire(&n, &a);

MergeSort(a, 1, n, n);///primul n e pt capatul vect din dreapta, iar al doilea e dimensiunea

for(i=1;i<=n;i++)

printf("%d ", a[i]);

///În curtea unui atelier de reparaţii auto, sunt n maşini care trebuie sa fie reparate. Deoarece nu sunt
suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.

#include<stdio.h>

void Citire(int*n, int*t, int**a)

scanf("%d", n);

scanf("%d", t);

*a = malloc((*n + 1) * sizeof(int));

int i;

for (i = 1;i <= *n;i++)

scanf("%d", *a + i);

}
void QuickSort(int *a, int st,int dr)

if (st<dr)

int mij=(st+dr)/2;

int aux=a[st];

a[st]=a[mij];

a[mij]=aux;//interschimbam valoarea de pe pozitia 1 cu valoarea de pe pozitia mijloc

int i=st;

int j=dr;

int d=0;

while (i<j)

if (a[i]>a[j])

aux=a[i];

a[i]=a[j];

a[j]=aux;//interschimbam valorile, daca interschimbam marim i-ul, ne luam o variabila int d=0

d=1-d;//daca noi nu am interschimbat valoarea, este 1;o sa scadem din d j-ul;

i=i+d;

j=j-(1-d);//daca am facut o interschimbare inseamna ca d-ul nostru este 0, daca nu e necesara


interschimbarea micsoram j-ul cu 1;daca apare o interschimbare marim i cu 1;

QuickSort(a,st, i-1);

QuickSort(a, i+1, dr);//o sa se opreasca while cand i=j

}
}

int main()

int n, t, *a, nr=0, i;

Citire(&n, &t, &a);

QuickSort(a, 1, n);

for(i=1;i<=n;i++)

if (a[i]<=t)

nr++;

t=t-a[i];

printf("%d ", nr);

#include<stdio.h>

void Citire(int*n, int**a, int**poz)

scanf("%d", n);

*a = malloc((*n + 1) * sizeof(int));

*poz = malloc((*n + 1) * sizeof(int));

int i;

for (i = 1;i <= *n;i++)

scanf("%d", *a + i);
}

void QuickSort(int *a, int st,int dr)

if (st<dr)

int mij=(st+dr)/2;

int aux=a[st];

a[st]=a[mij];

a[mij]=aux;//interschimbam valoarea de pe pozitia 1 cu valoarea de pe pozitia mijloc

int i=st;

int j=dr;

int d=0;

while (i<j)

if (a[i]>a[j])

aux2;

aux=poz[i];

poz[i]=poz[j];

poz[j]=aux;

aux=a[i];

a[i]=a[j];

a[j]=aux;//interschimbam valorile, daca interschimbam marim i-ul, ne luam o variabila int d=0

d=1-d;//daca noi nu am interschimbat valoarea, este 1;o sa scadem din d j-ul;

i=i+d;

j=j-(1-d);//daca am facut o interschimbare inseamna ca d-ul nostru este 0, daca nu e necesara


interschimbarea micsoram j-ul cu 1;daca apare o interschimbare marim i cu 1;
QuickSort(a,st, i-1);

QuickSort(a, i+1, dr);//o sa se opreasca while cand i=j

int main()

int n, *a, *poz, i;

Citire(&n, &a, &poz);

QuickSort(a, poz, 1, n);

for(i=1;i<=n;i++)

printf(“%d “, poz[i]);

S-ar putea să vă placă și