Advertisement
Guest User

Sorting

a guest
Jan 24th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. int istKleinerNachNummer(students_t *stud1, students_t *stud2){
  2.     return stud2->matrikelNummer-stud1->matrikelNummer;
  3. }
  4. int istGroesserNachNummer(students_t *stud1, students_t *stud2){
  5.     return stud1->matrikelNummer-stud2->matrikelNummer;
  6. }
  7. int istKleinerNachName(students_t *stud1, students_t *stud2){
  8.     return strcmp(stud2->name, stud1->name);
  9. }
  10. int istGroesserNachName(students_t *stud1, students_t *stud2){
  11.     return strcmp(stud1->name, stud2->name);
  12. }
  13.  
  14. //SORTIEREN (REKURSIV)
  15.  
  16. void quicksortNameAb(students_t *studierende[], int left, int right){
  17.     if (left < right){
  18.         int i = left;
  19.         int j = right;
  20.         char *vgl = studierende[(i+j)/2]->name;
  21.         do{
  22.             while (strcmp(studierende[i]->name, vgl) > 0){
  23.                 i = i+1;
  24.             }
  25.             while (strcmp(studierende[j]->name, vgl) < 0){
  26.                 j = j-1;
  27.             }
  28.             if (i<=j){
  29.                 students_t *temp = studierende[i];
  30.                 studierende[i] = studierende[j];
  31.                 studierende[j] = temp;
  32.                 i= i+1;
  33.                 j= j-1;
  34.             }
  35.         }while (i < j);
  36.         quicksortNameAb(studierende, left, j);
  37.         quicksortNameAb(studierende, i, right);
  38.     }
  39. }
  40.  
  41. //s.o. Pointer
  42.  
  43. void quicksortFktPtr (students_t *studierende[], int (*vergleichsFunktion)
  44.         (students_t *, students_t *), int left, int right){
  45.     if (left < right){
  46.         int i = left;
  47.         int j = right;
  48.         students_t *vgl = studierende[(i+j)/2];
  49.         do{
  50.             while (vergleichsFunktion(studierende[i], vgl) > 0){
  51.                 i=i+1;
  52.             }
  53.             while (vergleichsFunktion(studierende[j], vgl) < 0){
  54.                 j=j-1;
  55.             }
  56.             if(i<=j){
  57.                 students_t *temp = studierende[i];
  58.                 studierende[i] = studierende[j];
  59.                 studierende[j] = temp;
  60.                 i = i+1;
  61.                 j = j-1;
  62.             }
  63.         }while (i<j);
  64.         quicksortFktPtr(studierende, vergleichsFunktion, left, j);
  65.         quicksortFktPtr(studierende, vergleichsFunktion, i, right);
  66.     }
  67. }
  68.  
  69. //SORTIEREN
  70.  
  71. void sortiereAbsteigendNachName(students_t *studierende[], int anzahl){
  72.     if (anzahl > 1){
  73.         int left = 0;
  74.         int right = anzahl - 1;
  75.         printf("Sortiert nach Name, absteigend\n");
  76.         quicksortNameAb(studierende, left, right);
  77.         studierendeAusgeben(studierende, anzahl);
  78.         printf("Sortiert nach Name, aufsteigend\n");
  79.         quicksortFktPtr(studierende, istKleinerNachName, left, right);
  80.         studierendeAusgeben(studierende, anzahl);
  81.         printf("sortiert nach Name, absteigend\n");
  82.         quicksortFktPtr(studierende, istGroesserNachName, left, right);
  83.         studierendeAusgeben(studierende, anzahl);
  84.         printf("sortiert nach Nummer, aufsteigend\n");
  85.         quicksortFktPtr(studierende, istKleinerNachNummer, left, right);
  86.         studierendeAusgeben(studierende, anzahl);
  87.         printf("sortiert nach Nummer, absteigend\n");
  88.         quicksortFktPtr(studierende, istGroesserNachNummer, left, right);
  89.         studierendeAusgeben(studierende, anzahl);
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement