Prüfen ob Array alternierend sortiert ist?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen ob Array alternierend sortiert ist?

    Hi,

    wir haben eine Aufgabe bekommen in der wir drei rekursive Methoden schreiben sollen, die ein mit zufälligen natürlichen Zahlen belegtes Array überprüfen ob die Elemente aufsteigend, absteigend oder alternierend geordnet sind.

    Aufsteigend oder Absteigend ist ja kein Problem... aber bei alternierned stehe ich einfach auf dem Schlauch weil die Methode zudem noch rekursiv sein muss.

    Habe das In Java geschieben, dürfe aber in PHP nahezu gleich gehen.
    Hat jemand eine Idee wie man das Prüfen kann -> rekursiv. ??

    Hier die Methode die prüft ob aufsteigend sortiert:

    PHP-Code:
    /**
         * Methode prüft ob Elemente (vom Typ int) in einem Array aufsteigend
         * sortiert sind.
         * @param a, laenge : Array und Länge vom Array
         * @return boolean  : true falls Elemente aufsteigend sortiert sind
         */
        
    public static boolean asc(int[] aint laenge){
            
            
    // Basisfall: Vergleich des letzten und Vorletzten Elements.
            
    if(laenge == 0){
                
    System.out.print("|   JA    ");
                return 
    true;
            }
            
    // Rekursionsfall
            
    if(a[laenge-1] <= a[laenge]){
                return 
    asc(alaenge-1);
            }
            
    System.out.print("|    -    ");
            return 
    false;
        } 
    [SIZE=1]Projekte:
    wartower.de | planetd2.de

  • #2
    alternierend versteh ich jetzt so:

    1 | 7 | 2 | 6 | 3 | 5 | 4

    also zB jeder "gerade" eintrag aufsteigend, jeder "ungerade" absteigend ... dann springst du nicht um "1" sondern um "2" durch das array und verbindest beide methoden, die du schon hast ... mal als grobe idee.

    *verschieb zu bs
    Kissolino.com

    Kommentar


    • #3
      also bei aufsteigend absteigend sortiert würde ein vergleich von sort () bzw rsort unfd dem ursprungsarray langen... Da musst Du nicht jedes Element vergleichen...
      Alternierend...
      heisst also dass immer abwechselnd einer grösser einer kleiner...
      übergib doch das aktuelle array element rekursiv an die funktion...
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Habe die Methode hinbekommen, doch muss ich immer noch durch ein kleines Script von "außen" die Richtung vorgeben ob zuerst auf "<=" oder ">=" geprüft werden soll. Sprich erst prüfen ob letztes Element <= oder >= vorletztem Element ist und dann entsprechnd die Methode alt(.., .., 0) oder alt(.., .., 1) aufrufen.

        Hat jemand vieleicht eine Idee wie diese Richtungsvorgabe auch in die Methode rein kann?


        PHP-Code:
        /**
             * Methode prüft ob Elemente (vom Typ int) in einem Array alternierend
             * sortiert sind.
             * @param a, laenge : Array und Länge vom Array
             * @return boolean  : true falls Elemente alternierend sortiert sind
             */
            
        public static boolean alt(int[] aint laengeint i){
                        
                
                
        // Nur dann wenn Array mindestens drei Elemente enthält.
                
        if(a.length 3) {
                    
        System.out.print("|   -    ");
                    return 
        false;}
                
                
        // Basisfall
                
        if(laenge == 0){
                    
        System.out.print("|   JA   ");
                    return 
        true;
                }
                
                
                if(
        == 1){
                
        // Rekursionsfall 1
                
        if(a[laenge-1] <= a[laenge]){
                    return 
        alt(alaenge-10);
                }
                }else{
                
        // Rekursionsfall 2
                
        if(a[laenge-1] >= a[laenge]){
                    return 
        alt(alaenge-11);
                }
                }
                
        System.out.print("|   -    ");
                return 
        false;
            } 
        [SIZE=1]Projekte:
        wartower.de | planetd2.de

        Kommentar


        • #5
          public static boolean alt(int[] a, int laenge, int i = 0)

          so?
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Es muss zuvor aber überprüft werden ob 0 oder 1.
            [SIZE=1]Projekte:
            wartower.de | planetd2.de

            Kommentar

            Lädt...
            X