Hallo zusammen,
ich arbeite gerade in C mit dem Algorithmus „insertionsort“.
Ich sortiere damit ein Array.
Mein Problem ist, das jeder Wert im Array einer ID zugeordnet ist.
Wenn ich nach der ID suche, soll der zugehörige Wert ausgegeben werden.
Die Sortierung der float Werte funktioniert einwandfrei (absteigend).
Leider bekomme ich es nicht hin, dass er mir danach die richtige ID zum
float Wert anzeigt.
Beispiel:
Vor der Sortierung hat der float Wert: 2,453 die ID: 2.
Die soll der Wert auch nach der Sortierung haben. Egal auf welcher
Position sich nach der Sortierung der float Wert befindet, er hat immer
die gleich ID. Aktuelle hat er dann leider die falsche.
Bitte euch um Hilfe.
Ein Code Beispiel würde mir sehr Helfen.
SG
Mit den infos kann man kein nützliches Beispiel bringen, wir wissen ja
noch nicht mal, ob du ein Array von Strukts, eine linked list von
structs, oder was anderes hast, neben dem ganzen unbekannten Rest.Schau
dir mal qsort an, vielleicht passts ja zufällig.
http://www.cplusplus.com/reference/cstdlib/qsort/
Hier ein Beispiel für Insertionsort (Beispiel aus dem Netz):
1
void insertionSort(wert arr[], int n)
2
{
3
int i,j;
4
float key;
5
6
for (i = 1; i < 4; i++)
7
{
8
key = arr[i].zahlen;
9
j = i - 1;
10
11
while (j >= 0 && arr[j].zahlen > key)
12
{
13
arr[j + 1].zahlen = arr[j].zahlen;
14
j = j - 1;
15
}
16
arr[j + 1].zahlen = key;
17
}
18
}
struct array hat : int ID und float zahlen.
Ich sortiere jetzt nach arr[].zahlen.
Unsortiert:
6.34 -> ID:1
3.54 -> ID:2
5.23 -> ID:3
7.88 -> ID:4
Sortiert soll es dann so aussehen:
3.54 -> ID:2
5.23 -> ID:3
6.34 -> ID:1
7.88 -> ID:4
Sortierung der Werte funktioniert ja aber ich bekomme es nicht hin,
dass er mir die ID zum passenden Wert angibt. Die ist dann komplett
durcheinander.
Wie muss der Code jetzt aussehen, dass das funktioniert?
SG
helpme91 schrieb:> Wie muss der Code jetzt aussehen, dass das funktioniert?
Wurde doch schon gesagt.
Pack float und id zusammen in einen struct und schaufle diesen struct um
beim sortieren. Nicht nur den float.
Das ist so basic! Lies mal N. Wirth. Algorithmen und Datenstrukturen. Da
steht das bestimmt drinnen. Und bei der Gelegenheit wirst du noch sooooo
viel mehr lernen.
helpme91 schrieb:> Wie muss der Code jetzt aussehen, dass das funktioniert?
Mach key nicht vom Typ float sondern vom Typ wert.
Dann musst du natürlich die Zugriffe anpassen.
Nochmal: Es geht auch key = arr[i]; (wenn key eine struct ist)
Der Vergleich in der while-Schleife muss aber weiterhin den float Teil
vergleichen.
Nochmal, ich habe ein struct array. In dem sich die zahlen und die ID
befindet.
Ich muss insertionsort verwenden, das ist so festgelegt.
Ich habe euch gebeten, das ihr mir das anhand eines Beispiels zeigt.
Wäre es möglich, das jemand in den Code den ich gepostet habe das
reinschreibt? Dannkann ich das sehen und nachvollziehen.
So komme ich leider nicht weiter.
Leider habe ich auch nicht die Zeit mir ein Buch zu kaufen und das dort
nachzuvollziehen.
Ich muss das heute fertigstellen.
Bitte, danke.
Das wird nix.
Du trollst, und du wirst getrollt.
Wenn du die oben gegebenen Tips nicht in den vorhandenen Quellcode
einbauen kannst, hast du ihn nicht verstanden, und in diesem Fall
solltest du ersthaft die Finger da raus lassen.
helpme91 schrieb:> Wäre es möglich, das jemand in den Code den ich gepostet habe das> reinschreibt?
Hab ich doch, direkt im Post oben dran hab ich die insertionSort
Funktion doch bereits angepasst! (Edit: ich hab noch vergessen, die
Zeile "wert key = arr[i].zahlen;" ganz anzupassen, sollte "wert key =
arr[i];" sein, aber der rest sollte passen!)
helpme91 schrieb:> Der Code für die Sortierung ist von jemand anderen.> Ich bearbeite den nur.
Vielleicht solltest du demjenigen einfach beichten, dass du weder
programmieren kannst, noch dazu lust hast, es zu lernen. Das meme ein
Programierer würde nur Code aus dem Internet zusammenkopieren,
entschpricht nicht der Realität.
helpme91 schrieb:> So komme ich leider nicht weiter.
Dann gib halt deine Hausaufgabe nicht ab. So erkennt der Lehrer deine
Motivation auch und benotet entsprechend.
helpme91 schrieb:> Ein Code Beispiel würde mir sehr Helfen.
Bei der Beantwortung der Frage würde dein bisheriger Code auch helfen,
um auf den Fehler hinweisen zu können
Dafür bist du zu faul.
helpme91 schrieb:> Hier ein Beispiel für Insertionsort (Beispiel aus dem Netz):
DEINEN Code.
(übrigens ist der falsch und sortiert nur das zahlen-Element der
Struct).
helpme91 schrieb:> Darf ich leider nicht.> Der Code für die Sortierung ist von jemand anderen.> Ich bearbeite den nur.
Spinner. Mach deine Hausaufgaben selber statt abzuschreiben.