Harry: Mehrdimensionalen Array sortieren

Beitrag lesen

Hoi

ich schätze mal, das wird nicht gehen.

Stimmt. Da haben sich leider noch mehr Fehler eingeschlichen (ich sollte es mir abgewöhnen, derartigen Code zu posten wenn ich ihn nicht ausprobieren kann) ...

// as: array zum sortieren

temparray = new array();

function asort(spalte)
{
   for(i=0; i<as.length; i++)
   { ta(i);
danach ist temparray[i]=as[i]

Ne (siehe auch erste Nachtrag (<?m=31481&t=5641>)

temparray bekommt die Werte aus as[i] zugewiesen

for(j=i+1; j<as.length; j++)
     { if(temparray[i][spalte]>as[i][spalte])
ist stets gleich, da temparray[i]=as[i]

Käse freilich.

die Zeile muß auch ...

{ if(temparray[spalte]>as[j][spalte])

heißen.

ta(j); }
wird nie ausgeführt

jetzt schon.

at(i);
schreibt temparray[i] wieder nach as[i]

jetzt nimmer. Jetzt wird der garantiert kleinste Wert, der nun in Temparray steht, in das Array as[i] geschrieben. Nun fehlt da aber noch eine Zeile, die den Wert aus as[i] sichert und an die Stelle schreibt, wo vorher der jetzige Wert für as[i] stand.

}
-> Array hat hinterher die gleiche Reihenfolge, wie vorneweg

Nochmal der ganze Käse im Überblick:

// as: array zum sortieren

var temparray = new array();
var lastchangedj = "";

function asort(spalte)
{
  for(i=0; i<as.length; i++)
  { ta(i);
    lastchangedj=i;
    for(j=i+1; j<as.length; j++)
    { if(temparray[spalte]>as[j][spalte])
      { lastchangedj = j;
         ta(j); }
    }
    if(i!=lastchangedj) ch(i, lastchangedj);
    at(i);
  }
}

function ta(i)
{ for(j=0; j<as[i].length; j++)
    temparray[j] = as[i][j]; }

function at(i)
{ for(j=0; j<temparray.length; j++)
   as[i][j] = temparray[j]; }

function ch(i,j)
{ for(k=0; k<as[i].length; k++)
   as[j][k] = as[i][k]; }

Jetzt sollte es funktionieren (ich hab leider immer noch keine Möglichkeit, das richtig auszuprobieren)

[...] Code des Alg's, den ich empfehlen würde:

var i,j,t,len=Array2D.length
Rank=new Array(len)
for (i=0; i<len; i++) Rank[i]=i;

function SortDesc(spalte)
{ for (i=0; i<len-1; i++)
  { for (j=len-1; j>i; j--)
    { if (Array2D[Rank[j-1]][spalte]<Array2D[Rank[j]][spalte])
      { t=Rank[j-1];
        Rank[j-1]=Rank[j];
        Rank[j]=t;
      }
    }
  }
}

Schaut mir auf den ersten Blick so ein bißl nach einer abgekürzten Schreibweise von meinem Ding aus ... Werd's bei Gelgenheit mal ausprobieren :-)

Ciao,

Harry