Hi,
der Topicname ist mal wieder äußerst nichtsaussagend, daher mal eine kurze Erläuterung:
Ich habe ein Array mit folgendem Aufbau:
Delphi-Quellcode:
jobArray: Array of TJob;
// wobei:
TJob = record
j_id: integer; // Job-ID --> Prozessintern
j_prio: integer; // Priorität
j_color: string; // Farbe
j_name: string; // Name
j_proc: Array of integer; // Prozesszeit pro Maschine
Nach dem Füllen dieses Arrays, sollen die TJob's nach ihrer Prioriät (TJob.j_prio) absteigend sortiert werden. Dies habe ich über folgenden Quicksort Algorithmus gelöst:
Delphi-Quellcode:
procedure QuickSort(
var A:
array of TJob; iLo, iHi: Integer) ;
var
Lo, Hi, Pivot: Integer;
T: TJob;
begin
Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi)
div 2].j_prio;
repeat
while A[Lo].j_prio > Pivot
do Inc(Lo) ;
while A[Hi].j_prio < Pivot
do Dec(Hi) ;
if Lo <= Hi
then
begin
T := A[Hi];
A[Hi] := A[Lo];
A[Lo] := T;
Inc(Lo) ;
Dec(Hi) ;
end;
until Lo > Hi;
if Hi > iLo
then QuickSort(A, iLo, Hi) ;
if Lo < iHi
then QuickSort(A, Lo, iHi) ;
end;
// Quicksort
Mein Problem: Ich brauche alle möglichen Permutationen, wenn Jobs mit gleichen Prioritäten vorhanden sind. Hab mir nun so gedacht, dass ich nich das Array an sich speicher, sondern ein neues Array anlege mit den ID's der Jobs in jeweils sortierter Reihenfolge.
Aber wie bekomme ich alle möglichen Permutationen raus? Mit dem rekursiven Quicksort wird das schlecht gehen.
Gruß