Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » StringGrid Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.05.2004, 09:47 Uhr
~speedwant
Gast


Ich hoffe mir kann jemand helfen:
Mein Problem liegt darin, dass ich in einem StringGrid Inhalte nach zugehörigen Zahlen sortieren will. Aber ich bekomm das net hin.

Ich habe 18 Zeilen und in jeder steht ein Name (1.Spalte) und ein Integerwert (2.Spalte). Nun soll das ganze nach den aufsteigenden Integerwerten sortiert werden. Das mit dem höchsten Int wert nach ganz oben das zweitgrößte in die 2.Zeile usw.

Danke schon mal im Voraus:

mfg Speedwant
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.05.2004, 12:13 Uhr
~freewilly
Gast


Hallo,

hatte dafür mal eine Quicksort Variante:


C++:
void quicksort(TStringGrid *grid,int li,int re,int col,bool desc)
{
   int nli=li,nre=re,mi=StrToInt(grid->Cells[col][(li+re)/2]);
   String temp;
   do
   {
      while (desc ? (mi < StrToInt(grid->Cells[col][nre])) : (mi>StrToInt(grid->Cells[col][nre]))) nre--;
      while (desc ? (StrToInt(grid->Cells[col][nli])<mi) : (StrToInt(grid->Cells[col][nli])>mi)) nli++;
      if (nli<=nre)
      {
         temp=grid->Rows[nli]->CommaText;
         grid->Rows[nli]->CommaText=grid->Rows[nre]->CommaText;
         grid->Rows[nre]->CommaText=temp;
         nli++;
         nre--;
      }
   }
   while (nli<nre);
   if (li<nre) quicksort(grid,li,nre,col,desc);
   if (nli<re) quicksort(grid,nli,re,col,desc);
}



Aufruf mit:


C++:
quicksort(StringGrid1,StringGrid1->FixedRows,StringGrid1->RowCount-1,Column,false);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2004, 17:06 Uhr
~speedwant
Gast


geht das auch über c++Builder 6??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.05.2004, 18:44 Uhr
~freewilly
Gast


Hab selber "nur" C++ Borland 6.0 Enterprise.
Warum ?
Was funktioniert nicht ???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.05.2004, 22:38 Uhr
~speedwant
Gast


ich verstehe das programm net so genau!!
ich weiß beispielsweise überhapt net was String Temp; ist

könntest du mir eine kleine verständniserklärung posten?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.06.2004, 23:12 Uhr
~freewilly
Gast


Zur Erklärung von Quicksort:

Ein Feld wird in zwei (in der Regel unterschiedlich große) Teilfelder aufgeteilt, die Elemente werden dabei so vertauscht, daß alle Elemente des linken Teilfeldes kleiner (oder gleich) den Elementen des rechten Teilfeldes sind. Die einzelnen Teilfelder werden dann wieder sortiert... Und irgendwann sind wir fertig und das gesamte Feld liegt sortiert vor.

Die Aufteilung eines Feldes in zwei Teilfelder geschieht aufgrund von Vergleichen mit einem speziellen (Am Anfang der Teilung gewählten) Pivotelement. Deshalb wird dieses Verfahren auch als "Sortierung durch Pivotisierung" oder "Sortierung durch Partitionierung" bezeichnet.


temp ist eine Hilfsvariable, die du brauchst um zwei Werte zu tauschen.
Der Inhalt der einen zu tauschenden row (a) wird in temp (c) kopiert.
Dann nimmst du den Inhalt der row (b) und kopierst ihn in row (a).
Da du den ursprünglichen Inhalt von row (a) jetzt nicht mehr hast, nimmst du den Inhalt von temp (c) und kopierst ihn nach row (b).
So hast du zwei rows getauscht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: