Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include<stdio.h>//biblioteca
  2. #include<stdlib.h>//biblioteca
  3. #include<string.h>//biblioteca
  4. #define MAX 10//nr maxim de persoane
  5.  
  6. typedef struct {
  7. char nume[35];//numele unui angajat
  8. float salariu;//salariul unui angajat
  9. }angajat;//definim un angajat
  10.  
  11. angajat a[MAX];//creem vectorul
  12. //angajat aux;//variabila pt interschimbare
  13.  
  14. void citire()//creem functia de citire din fisier
  15. {
  16. FILE *f;//pointer pentru deschderea fisierului
  17. f = fopen("fisier.txt","r");
  18. for (int i = 0; i < MAX; i++)
  19. {
  20. fscanf(f,"%s %f\n", a[i].nume, &a[i].salariu);//cititm din fisier numele si salariul fiecarui angajat
  21. }
  22. }
  23.  
  24.  
  25.  
  26. void quicksort_c(angajat a[], int s, int d, int p, int m)//creem functia de sortare
  27. {
  28. int i = s, j = d, k = p, l = m;//capetii "intervalului" pe care il sortam
  29. char x[35];//elementul pe car eil comparam
  30. angajat aux;//variabila de interchimbare
  31. //ordonarea crescatoare
  32. strcpy(x, a[(s + d) / 2].nume);
  33. do {
  34. while (strcmp(a[i].nume, x) < 0) i++;//mergem pana gasim un elem mai mare decat x
  35. while (strcmp(a[j].nume, x) > 0) j--;//mergem pana unde gasim un elem mai mic decat x
  36. if (i <= j)
  37. {
  38. aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
  39. i++; j--;//incrementam/decrementam pt a verivica in continuare
  40. }
  41. } while (i <= j);//condita de oprire
  42. if (s < j) quicksort_c(a, s, j, p, m);
  43. if (d > i) quicksort_c(a, i, d, p, m);
  44.  
  45. //ordonarea descrescatoare
  46. strcpy(x, a[(p + m) / 2].nume);
  47. do {
  48. while (strcmp(a[k].nume, x) > 0) k++;
  49. while (strcmp(a[l].nume, x) < 0) l--;
  50. if (k <= l)
  51. {
  52. aux = a[k]; a[k] = a[l]; a[l] = aux;
  53. k++; l--;
  54. }
  55. } while (k <= l);
  56. if (p < l) quicksort_c(a, s, d, p, l);
  57. if (m > k) quicksort_c(a, s, d, k, m);
  58. }
  59. void afisare() {
  60. for(int i=0;i<MAX;i++)
  61. {
  62. printf("%s cu salariu %f\n", a[i].nume, a[i].salariu);
  63. }
  64. printf("\n");
  65. }
  66.  
  67. int main() {
  68. int k;
  69. printf("Numarul de de elemente ord.alf:"); scanf("%d", &k);//citirea lui k
  70. citire();//citim din fiser
  71. quicksort_c(a, 0, k-1,k , MAX - 1);
  72. afisare();//afisam vectorul/structul
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement