Hallo,
ich habe ein gepacktes array von 4 byte = Cardinal
Delphi-Quellcode:
ByteArray = packed record
case Integer of
1: (A: array[0..3] of Byte);
2: (Card: Cardinal);
end;
ich möchte das array sortieren, in diesem fall absteigend
da diese funktion sehr oft aufgerufen wird suche ich den kürzesten und direktesten weg... aso, den schnellsten auch noch^^ also was die wehnigsten cpu-befehle verbraucht :/
ich hatte es mit einem shell-sort versucht, aber der war fehlerhaft, der konnte unter bestimmten bedingungen nicht korreckt sortieren... also habe ich erstmal einen bubble-sort gemacht damit die sache überhautp erstmal weitergeht, aber der ist mir noch zu langsam
meine implementierung des shell-sort versagte bei array's wie (1,2,1,2)... der macht dann daraus (2,1,2,1)... ist auch logisch soweit ich das nachvolziehen kann... nur finde ich den fehler nicht... es soll (2,2,1,1) rauskommen
Delphi-Quellcode:
procedure D4SortByteArray(var A: ByteArray);
var
Temp: Byte;
procedure SwapB(var A,B: Byte);
begin
Temp:=A;
A:=B;
B:=Temp;
end;
begin
// Shell-Sort
//if A.A[0] < A.A[2] then SwapB(A.A[0],A.A[2]);
//if A.A[1] < A.A[3] then SwapB(A.A[1],A.A[3]);
//if A.A[0] < A.A[1] then SwapB(A.A[0],A.A[1]);
//if A.A[1] < A.A[2] then SwapB(A.A[1],A.A[2]);
//if A.A[2] < A.A[3] then SwapB(A.A[2],A.A[3]);
// Bubbel-Sort
if A.A[0] < A.A[1] then SwapB(A.A[0],A.A[1]);
if A.A[1] < A.A[2] then SwapB(A.A[1],A.A[2]);
if A.A[2] < A.A[3] then SwapB(A.A[2],A.A[3]);
if A.A[0] < A.A[1] then SwapB(A.A[0],A.A[1]);
if A.A[1] < A.A[2] then SwapB(A.A[1],A.A[2]);
if A.A[2] < A.A[3] then SwapB(A.A[2],A.A[3]);
if A.A[0] < A.A[1] then SwapB(A.A[0],A.A[1]);
if A.A[1] < A.A[2] then SwapB(A.A[1],A.A[2]);
if A.A[2] < A.A[3] then SwapB(A.A[2],A.A[3]);
end;
hat jemand eine idee wie ich hierbei noch rechenzeit einsparen kann?
ich möchte auch keine komplette sortierfunktion nutzen wie sie auch hier im forum vorhanden sind... das einrichten der counter und dann die schleifen... mags lieber direkt für die 4 byte
stehe gerade irgendwie auf dem schlauch... naja ist auch schon spät^^
da es sich um einer 32bit wert handelt in dem die bytes sortiert werden bin ich auch über x86
asm dankbar
mfg Dano