ID mit Wert nach sortierung wieder richtig ausgeben

Gast #6121146
Lesenswert?

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
Gast #6121674
Lesenswert?

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
Gast #6121699
Lesenswert?

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.
Gast #6122087
Lesenswert?

1
void insertionSort(wert arr[], int n)  
2
{  
3
    for (int i = 1; i < n; i++) // Ich nehme mal an n statt 4?
4
    {  
5
        wert key = arr[i].zahlen;  
6
        int j = i - 1;  
7
  
8
        while (j >= 0 && arr[j].zahlen > key.zahlen)
9
        {  
10
            arr[j + 1] = arr[j];  
11
            j = j - 1;  
12
        }  
13
        arr[j + 1] = key;  
14
    }  
15
}

Aber hier ware eventuell wirklich qsort sinnvoller, wozu das rad neu 
erfinden, wenn es das in c schon fertig gibt?
1
#include <stdlib.h>
2

3
int comperatorWertByZahlen(const void *pa, const void *pb){
4
  const wert* A = pa;
5
  const wert* B = pb;
6
  return B.zahlen - A.zahlen; // A und B vertauschen, um Reihenfolge zu ändern
7
}
8

9
void sortWertByZahlen(wert arr[], int n){
10
  qsort(arr, n, sizeof(*arr), comperatorWertByZahlen);
11
}
Gast #6122123
Lesenswert?

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.
Gast #6122134
Lesenswert?

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.
Gast #6122151
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren