Sortieren

Dac-XP

Erfahrenes Mitglied
Hallo!

Ich habe einen Highscore für mein Spiel programmiert und möchte diesen nun sortieren. Ich habe allerdings keine Ahnung wie...

Hier ist mal der Code!

Code:
#include <conio.h>
#include <stdio.h>
#include <vcl.h>
#include <stdlib.h>
#include <string.h>

struct mystruct
{
  char name[10];
  int score;
};

mystruct score[10];


void main(void)
{
  FILE *dat;

  printf("Geben Sie zehn Namen und die dazugehoerigen Punkte an!");


  for (int i = 0; i<10; i++)
    {
      fflush(stdin);
      printf("\n\nName: ");
      scanf("%s", &score[i].name);
      printf("\n\nScore: ");
      scanf("%i", &score[i].score);
    }
  dat = fopen("C:\\dat.txt", "w");
  fwrite(&score, sizeof(score), 1, dat);


  dat = fopen("C:\\dat.txt", "r");
  fread(score, sizeof(score), 1, dat);
  fclose(dat);

  clrscr();

  for(int i = 0; i<10; i++)
    {
      gotoxy(20, i+3);
      printf("%s", score[i].name);
      gotoxy(30, i+3);
      printf("  -  %i", score[i].score);
    }

  fflush(stdin);
  getch();
}

Das dort oben ist nur ein Beispiel!

MfG Hacker!:-)
 
Hallo
Da ich keinen blassen Schimmer von C habe sondern mit Java programmiere,
werd ich versuchen dir den Algorythus zu erklären.

Du hast 10 Elemente
Du lässt eine Schleife durch alle laufen (int i=0; i<(10-1);i++)
Du überprüfst ob element (i > i+1) ist,
wenn JA dann vertauscht du "i" mit "i+1"
Das Ganze lässt du wiederum in einer Schleife laufen,
die sooo lange läuft bis es nichts mehr zum tauschen gibt

Greetz frOm vAporizer
 
nennt sich bubblesort. Ist für wenig Elemente recht akzeptabel, da sehr einfach. Es gibt aber auch in der Standardbibliothek einfache Befehle die Sortieren. Such mal im Forum - ich hab vor kurzem erst einen ähnlichen Thread gesehen.
Sonst - ich schreib vermutlich demnächst ein Tutorial.
 
Danek für die Hilfe! Aber ich habe es schon mit BubbleSort versucht, und der mochte das irgendwie mit dem "struct" nicht. Dann habe ich versucht, das ein wenig umzuschreiben, aber es hat immer noch nicht funktioniert.

Vielleicht hat ja jemand schon mal vor dem Problem gestanden und kann mir jetzt helfen?

MfG Hacker!:-)
 
Bubblesort geht schon, auch mit dem struct. Wenn du's damit nicht hinkriegst, brauchst du einen anderen auch nicht versuchen, weil du scheinbar irgendwo einen logischen Fehler beim Schreiben begehst. Poste dochmal deinen Bubblesort-Ansatz.
 
Hat sich schon erledigt! Wie Dudadida schon gesagt hat, habe ich einfach nur falsch in die Variable gespeichert. Danke nochmal!

MfG Hacker!:-)
 
Also ich würde da Quick Sort aus der Standartbibliothek nehmen:

Funktion zum Vergleichen:
Code:
int mycomp(const void *s1, const void *s2)
{
	return ((mystruct *)s1)->score - ((mystruct *)s2)->score;
}
Und der Quick Sort:
Code:
qsort(score, 10, sizeof(mystruct), mycomp);
 
Zurück