Portal > Foren > PHP > PHP-Programmierung > Ein Array sortieren
Antwort
 
Themen-Optionen
Alt 20.05.2006, 20:22 Nach oben    #1
Benutzer
 
Registriert seit: 05.11.2005
Beiträge: 38
Standard Ein Array sortieren

Also was ich suche ist ein Lösungsansatz um ein Array Zahlen zu sortieren. Das soll nicht einfach per "sort()" gelößt werden sondern mit einem selber entworfenden Logarithmus.

Gruß

Gast
Gast ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.05.2006, 20:51 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

Zitat:
Zitat von Gast
sondern mit einem selber entworfenden Logarithmus.
http://de.wikipedia.org/wiki/Logarithmus
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.05.2006, 21:01 Nach oben    #3
Jay
Gast
 
Beiträge: n/a
Standard

PHP-Code:
$values = array (203014100670, -105);

$num count ($values);

for (
$i 0$i $num; ++$i)
{
    for (
$j $i+1$j $num; ++$j)
    {
        if (
$values[$i] < $values[$j])
        {
            
$tmp $values[$i];
            
$values[$i] = $values[$j];
            
$values[$j] = $tmp;
        }
    }
}

print_r ($values); 

Ob aufsteigend oder absteigend, bestimmt das Vorzeichen in der Bedingung.
War auch wieder mal lustig sowas zu programmieren.

< heißt absteigend
> heßt aufsteigend

d.h.

Das obige Beispiel sortiert das Array absteigend.

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.05.2006, 22:00 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

das ist klar, aber... da fehlt mir der Sinn hinter!

Warum das ganze selber machen?
Wie soll das anschl. anderes sein, dass sich das lohnt?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.05.2006, 22:13 Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Warum das ganze selber machen?
Wie soll das anschl. anderes sein, dass sich das lohnt?
Vielleicht braucht er das für die Schule.
Bei uns war das so ziemlich die erste PUC (Programmieren) Aufgabe die wir bekommen haben, damit wir Arrays besser verstehen haben wir dann auch noch Sachen gespiegelt und und und. Allerdings in Java.

Ansonsten macht es wenig Sinn, weil es einfach langsam ist.

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.05.2006, 09:37 Nach oben    #8
Benutzer
 
Registriert seit: 05.11.2005
Beiträge: 38
Standard

Sorry .. .ich meinte natürlich den Algorithmus. Vielen Dank für den Link und vor allem für das Codebeispiel. Ich habe mir über Nacht selber Gedanken gemacht und werde das Resultat posten. Und ja ... ist für die Schule, ansonsten bevorzuge ich sort() usw.

Gast
Gast ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.05.2006, 09:54 Nach oben    #9
Benutzer
 
Registriert seit: 05.11.2005
Beiträge: 38
Standard

So ... meine Lösung - vielleicht nicht die Beste aber immerhin meine eigene

Code:
<?php

    $zahlenreihe = array(2,5,77,-99,9,0,23,34,27,7,-12,198);
    
    function vergleichssortierung($zahlenreihe) {

        echo implode(' | ', $zahlenreihe) . '<br />';

        $vertauscht = 0;
        for ($n=0; $n<count($zahlenreihe)-1; $n++) {
            if ($zahlenreihe[$n] > $zahlenreihe[$n+1]) {
                $vertauscht++;
                $speicher = $zahlenreihe[$n];
                $zahlenreihe[$n] = $zahlenreihe[$n+1];
                $zahlenreihe[$n+1] = $speicher;
            }
        }
        if ($vertauscht == 0) return $zahlenreihe;
          else return vergleichssortierung($zahlenreihe);

    }

    echo '<b>' . implode(' | ', vergleichssortierung($zahlenreihe)) . '</b>';

?>

Geändert von Gast (21.05.2006 um 11:18 Uhr).
Gast ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.05.2006, 11:17 Nach oben    #10
Benutzer
 
Registriert seit: 05.11.2005
Beiträge: 38
Standard

Mhm ... jetzt bräuchte ich noch jemanden, der mir das evtl. in Prolog "übersetzen" könnte

Vielen Dank im Voraus!

Gast
Gast ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.05.2006, 14:27 Nach oben    #11
axo
Gast
 
Beiträge: n/a
Standard

prolog lernst mal schön selber. von einem fertigen prolog-skript lernst du nichts mehr, denn es kommt auf den weg an, und nicht auf das ziel. speziell bei prolog, wo man ordentlich umdenken muss.
einen tipp hätte ich aber: bubblesort dürfte mit prolog die einfachste methode sein. um effizienz geht's ja nicht.

by the way: warum benutzt du keine suchmaschine?

[edit]
ah, ich sehe grad, du hast eh bubblesort implementiert. also dann: in prolog ist es das selbe in grün.
[/edit]

Geändert von axo (21.05.2006 um 18:32 Uhr).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 13:16 Nach oben    #12
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Endlich mal was auf das ich antworten kann.

Es gibt da noch den Mergesort, der neben Bubble- und Quicksort der schnellste ist, weil er am wenigsten Kosten verursacht.
Schau einfach mal unter wikipedia.de nach Merge Sort. Dort findest du auch ne Java-Implementierung.

Ansonsten ist das ganze relativ einfach. Du hast ja schon ein paar Ansätze.

Hier mal meine implementierung des Mergesorts. Allerdings mit Java programmiert. Die Portierung sollte dir recht leicht fallen

Falls du noch weitere Fragen zum (eigentlich selbsterklärenden) Code haben, nur her damit

BTW... Java haben wir derzeit auch im LK... Ist recht spaßig

Code:
import java.util.Random;

public class Sortieren {


  Random rnd = new Random();

  public int[] getZufallsFeld(int n, int max) {
    int i;
    int [] feld = new int[n];
    for(i=0;i<n;i++) {
      feld[i]=rnd.nextInt(max);
    }
    return feld;
  }
// Suchen

  public static int MergeSearch(int[] liste, int buchstabe) {
      int liste1 = liste.length/2;
      int liste2 = liste.length/2;
      int[] l1 = new int[liste1];
      int[] l2 = new int[liste2];
      int n = 0;
      
      for(int i=0;i<= liste1;i++) {
        l1[n] = liste[i];
        n++;
      }
      for(int j=liste2-liste1;j<=liste2;j++) {
        l2[n] = liste[j];
        n++;
      }
      
      if(l1[liste1] < buchstabe){
        MergeSearch(l2, buchstabe);
      }if(l1[liste1] == buchstabe) {
        return l1[liste1];
      }if(l2[liste1] > buchstabe) {
        MergeSearch(l1,buchstabe);
      }
  }
  
  
// Sortieren

   public static int[] merge(int[] list1, int[] list2){
      int k = list1.length + list2.length;
      int[] list3 = new int[k];
      int i=0;
      int j=0;
      int n=0;
      while (list1.length>i && j<list2.length){ //bis eine Liste durchgelaufen ist
        if (list1[i]<list2[j]) {
          list3[n] = list1[i];
          i++;
        }
        else {
          list3[n] = list2[j];
          j++;
        }
        n++;
      }
      //restliche Elemente der ersten Liste ans Ende haengen
      if (list1.length>i) {
        for (int q =i; q<list1.length; q++){
          list3[n] = list1[q];
          n++;
        }
      }
      //restliche Elemente der zweiten Liste ans Ende haengen
      if (list2.length>j) {
        for (int p =j; p<list2.length; p++){
          list3[n] = list2[p];
          n++;
        }
      }
      return list3;
    }
    
    //Erstellt einen Int-Array aus Teilen eines anderen Int-Array
    public static int[] listeErstellen(int[] liste, int start, int ende){
      int[] endListe = new int[ende];
      int n=0;
      for (int i=start; i<(start+ende); i++){
        endListe[n] = liste[i];
        n++;
      }
      return endListe;
    }
    
    //Splitten der Listen und wieder zusammensetzen
    public static int[] splitNSort (int[] liste) {
      int[] endListe = new int[liste.length];
      int l1 = liste.length / 2;
      int l2 = liste.length - l1;
      
      if (liste.length > 1) {
        endListe = merge(splitNSort(listeErstellen(liste,0,l1)),splitNSort(listeErstellen(liste,l1,l2)));
      }
      else {
        endListe = liste;
      }
      return endListe;
    }

    //umwandeln eines Int-Array in einen String
    public static String intArrayToString(int[] liste){
      String str = "";
      for (int i=0; i<liste.length;i++){
        str += liste[i] + ",";
      }
      return str;
    }
    
    public static void main(String args[]){
      Zufallsliste zufallsliste = new Zufallsliste();
      int[] list1 = zufallsliste.getZufallsFeld(10,10);
      System.out.println("ungeordnete Liste: " + intArrayToString(list1));
      
      int[] list2 = splitNSort(list1);
      
      System.out.println("geordnete Liste: " + intArrayToString(list2));
      
      int rueckwert = MergeSearch(list2,5);
    
    }
}
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.03.2007, 18:16 Nach oben    #13
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 227
Standard

Hallo,

also folgendes Array liegt vor ...

Code:
$array[0]
[0]Array ( [0] => 1 [1] => 1 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 1 [8] => 1 ) 
[1]Array ( [0] => 2 [1] => 11 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 11 [8] => 1 ) 
[2]Array ( [0] => 3 [1] => 10 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 10 [8] => 1 ) 
[3]Array ( [0] => 0 [1] => 9 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 9 [8] => 0 )
nach einem

array_multisort($array[0], SORT_ASC);

Code:
$array[0]
[0]Array ( [0] => 0 [1] => 9 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 9 [8] => 0 ) 
[1]Array ( [0] => 1 [1] => 1 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 1 [8] => 1 ) 
[2]Array ( [0] => 2 [1] => 11 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 11 [8] => 1 ) 
[3]Array ( [0] => 3 [1] => 10 [2] => [3] => [4] => [5] => 0 [6] => 0 [7] => 10 [8] => 1 )
das eigentliche ist das dieses array nach dem feld [7] geordnet werden soll.

Ich komme da einfach nicht dahinter warum und wie !?

Jemand ne Idee oder einen Anstoss für mich ?
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!
DasMööp ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.03.2007, 22:32 Nach oben    #14
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 227
Standard

Lösung ....

PHP-Code:
function cmpd($a$b)
{
    if (
$a[7] == $b[7]) {
        return 
0;
    }

    return (
$a[7] < $b[7]) ? -1;

PHP-Code:
usort ($array'cmpd'); 
http://www.php.net/manual/de/function.usort.php

-- erweitert --

Ausserhalb als Funktion:
PHP-Code:
usort($array,'cmpd'
In einer Klasse:
PHP-Code:
usort($array,array($this,'cmpd')); 
(für alles was als Parameter vom Typ Callback erwartet)
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!

Geändert von DasMööp (25.03.2007 um 22:42 Uhr).
DasMööp ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zend Framework - Probleme mit Zend_Controller_RewriteRouter bzw. Form der URLs Ben PEAR, PECL und Frameworks 12 24.12.2006 17:17
Suche Hilfe: Angebot und Nachfrage berechnen ljungi Plauderecke 6 17.12.2006 22:10
Array in Bezug auf ein anderes sortieren... code5 PHP-Programmierung 2 15.05.2006 15:56
Ein Array in ein Array schreiben bacarni PHP-Programmierung 2 07.02.2006 14:24
Zweidimensionales Array sortieren ehli75 Allgemeine Java-Programmierung 2 17.06.2005 09:03


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:46 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44