Sortieren die 12548....



  • Moin moin

    ich habe ein int day[3]; Array mit drei Werten.
    Die Werte können von 1 - 28 gehen.
    Die Werte können in ihren Array Positionen nicht vertauscht werden.
    Ich such das oder die (==) kleinsten.
    Alle Werte größer als dies(e) werden auf 0 gesetzt.
    Es können aber schon 0 Werte im Array geliefert werden.

    Z.B.
    3 12 8 ==> 3 0 0
    6 6 20 ==> 6 6 0
    0 1 0 ==> 0 1 0
    17 17 17 ==> 17 17 17

    Geht das nur mit einer großen if else Schachtel oder gibt es da auch elegante Methoden.

    Ich habe schon überlegt den Index beim tauschen der Zahlen mitzuschleifen. Dann hätte man/frau ein int day[3][2]; Nur scheint mir der overhead recht groß.



  • vielleicht so in dieser riochtung

    //kleinsten wert suchen
    	int min=30;//upps, =0 war falsch
    	for(int i=0;i<3;++i){
    		if(day[i]!=0 && day[i]<min){
    			min=day[i];
    		}
    	}
    
    	//alle anderen werte nullen
    	for(int i=0;i<3;++i){
    		if(day[i]>min){
    			day[i]=min;
    		}
    	}
    

  • Mod

    Geht das nur mit einer großen if else Schachtel oder gibt es da auch elegante Methoden.

    Ich glaube, fuer eine for-Schleife, die zwei Mal laueft, kann man den Loop auch mal unrollen und es bleibt trotzdem lesbar. Ich bin sogar versucht, den Hauptloop zu unrollen. Das Ergebnis ist nicht elegant, aber auch nicht unelegant:

    for(i = 0; i < 3; ++i)
    {
      if (day[i] != 0)
      {
        if (day[(i+1)%3] > day[i]) day[(i+1)%3] = 0;
        if (day[(i+2)%3] > day[i]) day[(i+2)%3] = 0;
      }
    }
    

    PS: Wie du siehst, wird da weder sortiert, noch das Minimum gesucht (Minimumsuche wuerde uebrigens auch kein Sortieren erfordern), ich habe mich nur an dem gewuenschten Ergebnis orientiert. Wenn man es braucht, kann man natuerlich nebenher noch mit das Minimum suchen.



  • Danke !!

    Ich bin glaube ich, langsam zu alt.
    Der Trick mit dem Modulo, war es.
    Ich kam einfach nicht drauf wie ich das in der Schleife abfange.


Log in to reply