PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sortieren von arrays...wie?


Ionstorm
2005-04-02, 15:06:51
Hallo, also mein Problem ist, ich habe mehr oder weniger eine Datenbank, die wie folgt aussieht, und möchte diese dann geordnet nach den Namen ausgeben können. Nach Anfangsbuchstaben wäre das ganze kein Problem, aber es sollten eigentlich alle folgenden Buchstaben bzw. Zahlen (wenn nach Postleitzahl sortiert wird) ausgewertet werden. Hab da jetzt schon ne Weile rumprobiert und es wird einfach nix, is mir einfach zu komplex ;( vielleicht liegts aber auch nur am Urlaub :rolleyes: , naja, auf jedenfall, gibt es vielleicht eine fertige Funktion mit der ich mein Problem lösen könnte oder muss ich mir da echt selber einen Algorithmus ausdenken?

#include <stdio.h>
#include <stdlib.h>
#include "boerd.h"
#define MAX 30

#define ANZAHL 5

int sort [ANZAHL];

struct adresse { char strasse [MAX];
char hausnummer [MAX];
char plz [MAX];
char ort [MAX];
};

struct schueler{ char vorname [MAX];
char nachname[MAX];
struct adresse wohnort;
};

struct schueler nummer [ANZAHL];

int main (void)
{
int abfrage=1;
int NR=1;
int alv=1;
int baum;

for (abfrage=1;abfrage==1;)
{
eingabe(NR);
printf ("Weiteren Schueler eintragen? ");
scanf ("%d",&abfrage);
fflush(stdin);
if (abfrage==1)
{
NR++;
}
}

for (alv=1;alv!=(NR+1);alv++)
{
ausgabe(alv);
}
scanf("%d",&baum);
}

void eingabe (int NR)
{
printf("Vorname : ");
fgets(nummer[NR].vorname, MAX, stdin);
printf("Nachname : ");
fgets(nummer[NR].nachname, MAX, stdin);
printf("Strasse : ");
fgets(nummer[NR].wohnort.strasse, MAX, stdin);
printf("Hausnummer : ");
fgets(nummer[NR].wohnort.hausnummer, MAX, stdin);
printf("Postleitzahl : ");
fgets(nummer[NR].wohnort.plz, MAX, stdin);
printf("Ort : ");
fgets(nummer[NR].wohnort.ort, MAX, stdin);
}

void ausgabe (int NR)
{
printf("\nVorname : %s",nummer[NR].vorname);
printf("Nachname : %s",nummer[NR].nachname);
printf("Strasse : %s",nummer[NR].wohnort.strasse);
printf("Hausnummer : %s",nummer[NR].wohnort.hausnummer);
printf("Postleitzahl : %s",nummer[NR].wohnort.plz);
printf("Ort : %s\n",nummer[NR].wohnort.ort);
}

wär schön wenn mir da wer weiterhelfen könnte!

Ionstorm

mrdigital
2005-04-02, 15:43:43
Wenn du das ganze in C++ machst, kannst du die STL verwenden. In der STL gibt es Template-Klassen um die Daten zu speichern und gegebenenfalls auch organisieren / sortieren.

Ionstorm
2005-04-02, 17:39:00
Das Problem ist das ich Anfänger bin und mit C++ noch nichts gemacht habe. Steige erst grade so langsam bei C# ein! Eine andere Möglichkeit gibt es unter normalem C nicht?

Ionstorm

zeckensack
2005-04-02, 18:08:48
In C bzw in C++ ohne STL wirst du nicht daran vorbeikommen dir selbst einen Sortieralgorithmus selbst zu implementieren. Derer gibt es viele ;)

Füttere mal Google mit den Begriffen "Bubblesort", "Mergesort" und "Quicksort" (für den Anfang). Quicksort ist von den dreien der "beste" (geringste durchschnittliche Laufzeit), allerdings auch am schwersten zu verstehen und korrekt zu implementieren.

Für Spezialfälle immer wieder witzig ist auch "Radix sort".

Ionstorm
2005-04-02, 18:19:43
much thx :) das dürfte mir weiterhelfen!!!

Ionstorm

mrdigital
2005-04-02, 20:26:50
An sonsten ist BubbleSort schön, weil er sehr leicht zu begreifen und zu implementieren ist, allerdings ist er nicht der schnellste ;)

Trap
2005-04-02, 20:57:22
In C gibt es qsort(): http://www.cplusplus.com/ref/cstdlib/qsort.html
in C++ std::sort(): http://www.sgi.com/tech/stl/sort.html

Selber programmieren ist nicht hilfreich, mehr als Abschreiben macht man da ja doch nicht.