Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>//biblioteca
- #include<stdlib.h>//biblioteca
- #include<string.h>//biblioteca
- #define MAX 10//nr maxim de persoane
- typedef struct {
- char nume[35];//numele unui angajat
- float salariu;//salariul unui angajat
- }angajat;//definim un angajat
- angajat a[MAX];//creem vectorul
- //angajat aux;//variabila pt interschimbare
- void citire()//creem functia de citire din fisier
- {
- FILE *f;//pointer pentru deschderea fisierului
- f = fopen("fisier.txt","r");
- for (int i = 0; i < MAX; i++)
- {
- fscanf(f,"%s %f\n", a[i].nume, &a[i].salariu);//cititm din fisier numele si salariul fiecarui angajat
- }
- }
- void quicksort_c(angajat a[], int s, int d)//creem functia de sortare
- {
- int i = s, j = d;//capetii "intervalului" pe care il sortam
- char x[35];//elementul pe car eil comparam
- strcpy(x, a[(s + d) / 2].nume);
- angajat aux;//variabila de interchimbare
- do {
- while (strcmp(a[i].nume, x) < 0) i++;//mergem pana gasim un elem mai mare decat x
- while (strcmp(a[j].nume, x) > 0) j--;//mergem pana unde gasim un elem mai mic decat x
- if (i <= j)
- {
- aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
- i++; j--;//incrementam/decrementam pt a verivica in continuare
- }
- } while (i <= j);//condita de oprire
- if (s < j) quicksort_c(a, s, j);//ord subvectorul stang daca e cazul
- if (d > i) quicksort_c(a, i, d);//ord subvectorul drept dca e cazul
- }
- void quicksort_d(angajat a[], int s, int d)//creem functia de sortare
- {
- int i = s, j = d;//capetii "intervalului" pe care il sortam
- char x[35];//elementul pe car eil comparam
- strcpy(x, a[(s + d) / 2].nume);
- angajat aux;//variabila de interchimbare
- do {
- while (strcmp(a[i].nume, x) > 0) i++;//mergem pana gasim un elem mai mic decat x
- while (strcmp(a[j].nume, x) < 0) j--;//mergem pana unde gasim un elem mai mare decat x
- if (i <= j)
- {
- aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
- i++; j--;//incrementam/decrementam pt a verivica in continuare
- }
- } while (i <= j);//condita de oprire
- if (s < j) quicksort_d(a, s, j);//ord subvectorul stang daca e cazul
- if (d > i) quicksort_d(a, i, d);//ord subvectorul drept dca e cazul
- }
- void afisare() {
- for(int i=0;i<MAX;i++)
- {
- printf("%s cu salariu %f\n", a[i].nume, a[i].salariu);
- }
- printf("\n");
- }
- int main() {
- int k;
- printf("Numarul de de elemente ord.alf:"); scanf("%d", &k);//citirea lui k
- citire();//citim din fiser
- quicksort_c(a, 0, k - 1);//ord crescator primele k nume
- quicksort_d(a, k, MAX - 1);//ord descrescator restul elementelor
- afisare();//afisam vectorul/structul
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement