schwierige Sortierung



  • Hi, ich bin neu hier, und bräuchte bitte eure Hilfe bei einer Sortierung.
    Ich habe ein Array gegeben mit verschiedenen Zahlen befüllt.
    Array[]={10,0,20,40,0,10,50,10}.
    Sortiert wird es danach zu ArraySortiert[]={0,0,10,10,10,20,40,50}.
    Ich würde gern das letzte Minimum außer der "0" ausgegeben bekommen. Es wäre in diesem Beispiel die "10", jedoch 'möchte' ich die 3. "10" ausgegeben bekommen. In diesem Array wäre es an der letzten Stelle. Ausgegeben würde ich gern die Stelle "7" erhalten.
    Wie ist dieses zu lösen? Ich hoffe jemand kann mir helfen und versteht mein Problem.



  • so vllt. 😕

    ...
    int main(void){
      int ArraySortiert[]={0,0,10,10,10,20,40,50};
      size_t i = 0;
      size_t l = sizeof(ArraySortiert)/sizeof(ArraySortiert[0]);
      int val;
    
      while(i < l && ArraySortiert[i] == 0){
        i++;
      }
    
      if(i < l){
        val = ArraySortiert[i];
        while(i < l && ArraySortiert[i] == val){
          i++;
        }
        printf("index:%d",i-1);
      }else{
        printf("only zero:(");
      }
    
      return 0;
    }
    

    @edit: du musst natürlich eine stabile sortierfunktion verwenden, sonst wird das nichts. wenn ich mich recht erinnere, kann man qsort verwenden, wenn man in dem callback bei gleichen werten die adressen zum vergleich nimmt.



  • weiteres gibt es schon zich andere threads zu dieser problemstellung... schau
    mal unter der suchfunktion, dort hättest die lösung gefunden.

    an ein beispiel kann ich mich erinnern dass es genau die gleiche aufgaben
    stellung war, wobei ich mich nicht erinnern kann ob es eine aufgabenstellung
    aus Prof. Eberhardts aufgaben oder eine die hier im Forum gestellt wurde.



  • War auch hier im Forum.
    Wobei der TE damals zumindest schon mal das erste Vorkommen der ersten Zahl !=0 gefunden hat.



  • ihr hättet mich auch darauf hinweisen können, dass ich einen fehler im code hab, statt auf der suche rumzuhacken!

    val = ArraySortiert[i++];
    

    statt

    val = ArraySortiert[i];
    


  • Schon allein die Aufgabenstellung ist ein Fehler.
    Durch das Sortieren geht idR die Information verloren, an welcher Stelle
    das 3. Auftreten von '10' vor dem Sortieren gestanden haben mag,
    egal ob instabil oder stabil sortiert wird.
    Vor dem Sortieren sind ja die Einträge des Feldes in einer
    zufälligen Anordnung, und die kann man - ausgehend von dem sortierten Feld -
    natürlich unmöglich herausfinden - Und damit auch nicht den Index, an dem
    die 3. '10' vor dem Sortieren war.

    Also wär's geschickter, dieses Minimum != 0 vor dem Sortieren
    des Arrays herauszufinden (relativ einfach machbar).
    Dann ist es in der Folge auch egal, ob stabil oder unstabil sortiert
    wird. Aber aus einem sortierten Feld ein ganz konkretes
    unsortiertes Feld rekonstruieren zu wollen, ist grober Unfug.

    mfg



  • und wieso sollte ich ein bereits sortiertes feld wieder in ein unsortiertes
    umwandeln? wo liegt da der sinn? ich werde doch nicht etwas sortieren um es nach-
    her wieder durcheinander zu bringen. währe das gleiche wie wenn du holz
    anzünden würdest und aus der asche versuchst das genau gleiche holzstück zu
    konstruieren was ja in diesem fall wirklich humbug wäre da die brennbaren
    rohstoffe bzw. elemente bereits in ein andere, nicht brennbare elemente
    umgewandelt wurden...



  • Sorry war Müll



  • Andere Frage: Wozu brauchst du das denn? Muss das Feld am Ende sortiert vorliegen, oder benutzt du Sortierung nur dafür um das Ergebnis zu bekommen?


Anmelden zum Antworten