Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array sortieren!!!? (https://www.delphipraxis.net/126942-array-sortieren.html)

guidok 6. Jan 2009 09:30

Re: array sortieren!!!?
 
Zitat:

Zitat von Uwe Raabe
1) vertausche vor dem ersten Sortieren folgende Array-Werte: B[1] <-> B[6], B[2] <> B[12], B[3] <> B[18]

2) sortiere nun die ersten vier Array-Werte B[0]..B[3] (der größte soll in B[0] stehen)

3) sortiere dann die letzten 21 Array-Werte B[2]..B[23] (der größte soll in B[2] stehen)

Nun hast die in B[0]..B[4] die gewünschten Werte stehen.

Und 1. könntest du dir sparen, wenn du die Werte von 0, 6, 12 und 18 bereits beim Einlesen in das Array an die ersten Positionen setzt und anschließend alle anderen Werte...

AlexanderBrade 6. Jan 2009 09:46

Re: array sortieren!!!?
 
Wie aber sortier man nun lediglich einen bestimmten Teil des Feldes? z.B. von B[0] bis B[3]?
Wie muss dabei der BubbleSort aufgebaut sein?

mkinzler 6. Jan 2009 10:04

Re: array sortieren!!!?
 
Die Grenzen ensprechend setzen. Bei diesem Beispiel wäre eine festgecodede Sortierung natürlich sinnvoller

QuickAndDirty 6. Jan 2009 10:19

Re: array sortieren!!!?
 
Lehrer denken sich schon lustige Dinge aus. Ich frage mich wie die Aufgabenstellung dazu aussah...

Klaus01 6. Jan 2009 10:25

Re: array sortieren!!!?
 
Ich würde es so lösen:

Deine zulässigen Werte sind 1..15.


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a,b : TByteArray;
  i,j: Integer;
begin
  randomize;
  setLength(b,24);
  for i:=0 to high(b) do
    b[i]:=random(15)+1;
  memo1.lines.add('Ausgabe Array b');
  ausgabe(b);
  setLength(a,4);
  // Übertragung von b[0],b[6],b[12] und b[18] in das Array a
  for i:=0 to high(a) do
   a[i] := b[i*6];

  memo1.lines.add('Ausgabe Array a');
  ausgabe(a);

  bubbleSort(a);

  memo1.lines.add('Ausgabe Array a nach der Sortierung');
  ausgabe(a);
  // zweihhöchster und höchster Wert aus a
  for i:=2 to 3 do
    begin
      for j:=0 to 3 do
        if a[i] = b[j*6] then
          b[j*6] := 0; // warum 0, weil 0 ein nicht zulässiger Wert ist.
    end;
  memo1.Lines.add('Ausgabe Array b nach der Ersetzung der zwei höchsten Werte aus Array A');
  ausgabe(b);
  bubbleSort(b);
  memo1.Lines.add('Ausgabe Array b nach der Sortierung');
  ausgabe(b);
end;
wobei TByteArray so ausschaut
Delphi-Quellcode:
:
type
  TByteArray = Array of Byte;
und die Signatur von bubbleSort so:
Delphi-Quellcode:
procedure TForm1.bubbleSort(data:TByteArray);
Hier ein Beispieldurchlauf:
Code:
Ausgabe Array b
  5 12  3 10  5  2  8 13 12 12 13  9  2  8  9 12 12 14  1  5  6  5  1  1
Ausgabe Array a
  5  8  2  1
Ausgabe Array a nach der Sortierung
  1  2  5  8
Ausgabe Array b nach der Ersetzung der zwei höchsten Werte aus Array A
  0 12  3 10  5  2  0 13 12 12 13  9  2  8  9 12 12 14  1  5  6  5  1  1
Ausgabe Array b nach der Sortierung
  0  0  1  1  1  2  2  3  5  5  5  6  8  9  9 10 12 12 12 12 12 13 13 14
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz