Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 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. void quicksort_c(angajat a[], int s, int d)//creem functia de sortare
  25. {
  26. int i = s, j = d;//capetii "intervalului" pe care il sortam
  27. char x[35];//elementul pe car eil comparam
  28. strcpy(x, a[(s + d) / 2].nume);
  29. angajat aux;//variabila de interchimbare
  30. do {
  31. while (strcmp(a[i].nume, x) < 0) i++;//mergem pana gasim un elem mai mare decat x
  32. while (strcmp(a[j].nume, x) > 0) j--;//mergem pana unde gasim un elem mai mic decat x
  33. if (i <= j)
  34. {
  35. aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
  36. i++; j--;//incrementam/decrementam pt a verivica in continuare
  37. }
  38. } while (i <= j);//condita de oprire
  39. if (s < j) quicksort_c(a, s, j);//ord subvectorul stang daca e cazul
  40. if (d > i) quicksort_c(a, i, d);//ord subvectorul drept dca e cazul
  41. }
  42.  
  43. void quicksort_d(angajat a[], int s, int d)//creem functia de sortare
  44. {
  45. int i = s, j = d;//capetii "intervalului" pe care il sortam
  46. char x[35];//elementul pe car eil comparam
  47. strcpy(x, a[(s + d) / 2].nume);
  48. angajat aux;//variabila de interchimbare
  49. do {
  50. while (strcmp(a[i].nume, x) > 0) i++;//mergem pana gasim un elem mai mic decat x
  51. while (strcmp(a[j].nume, x) < 0) j--;//mergem pana unde gasim un elem mai mare decat x
  52. if (i <= j)
  53. {
  54. aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
  55. i++; j--;//incrementam/decrementam pt a verivica in continuare
  56. }
  57. } while (i <= j);//condita de oprire
  58. if (s < j) quicksort_d(a, s, j);//ord subvectorul stang daca e cazul
  59. if (d > i) quicksort_d(a, i, d);//ord subvectorul drept dca e cazul
  60. }
  61.  
  62.  
  63. void afisare() {
  64. for(int i=0;i<MAX;i++)
  65. {
  66. printf("%s cu salariu %f\n", a[i].nume, a[i].salariu);
  67. }
  68. printf("\n");
  69. }
  70.  
  71. int main() {
  72. int k;
  73. printf("Numarul de de elemente ord.alf:"); scanf("%d", &k);//citirea lui k
  74. citire();//citim din fiser
  75. quicksort_c(a, 0, k - 1);//ord crescator primele k nume
  76. quicksort_d(a, k, MAX - 1);//ord descrescator restul elementelor
  77. afisare();//afisam vectorul/structul
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement