function InsertIfEnough(Value: Integer; var Table: array of Integer): Integer;
var
Max, Index, i: Integer;
begin
Max := Length(Table) - 1;
for Index := 0 to Max do
if Value > Table[Index] then
Break;
if Index < Max + 1 then
begin
Result := Index;
for i := Max downto Index + 1 do
Table[i] := Table[i - 1];
Table[Index] := Value;
end
else
Result := -1;
end;
Remarque :
Cette fonction permet d'insérer dans un tableau d'entiers une valeur,
à la condition que cette valeur soit supérieure à la plus petite valeur
du tableau, cette dernière étant alors supprimée, afin de garder un nombre
constant de valeurs.
Dans ce cas, la valeur retournée correspond à l'index de la position occupée
dans le tableau, sinon la valeur de retour est -1.
Cette fonction gère donc parfaitement un tableau de scores de jeu ("Hall of fame")
qui ne conservera que les x meilleurs scores.
function InsertIfEnough(const Value: Integer; var Table: array of Integer): Integer;
var
Max,Index : Integer;
begin
Max := High(Table);
Index := Max;
if Value < Table[Index] then
result := -1
else
begin
while (Value > Table[Index]) and (index > -1) do
begin
if Index < Max then
Table[Index+1] := Table[Index];
Table[Index] := Value;
Index := Index-1;
end;
result := index+1;
end;
end;
function InsertIfEnoughNS(const Value: Integer; var Table: array of Integer): Integer;
var
VMin,IMin, Len, N : Integer;
begin
Len := High(Table);
IMin := Len;
For N := 0 to Len-1 do
if Table[N] < Table[IMin] then
IMin := N;
if Table[IMin] < Value then
Table[IMin] = Value;
result := IMin;
end;
Remarque :
Alternative plus performantes, pour tableaux triés (1ere fonction) par ordre croissant (indice 0 contient la plus grande valeur) et pour les tableaux non triés (2eme fonction).
Dans la premiere fonction, Value "remonte" dans le tableau tant qu'elle est superieure a la valeur du tableau a l'indice en cours.
Dans la deuxieme methode, "Value" remplace la plus petite valeur du tableau si cette derniere est inferieure a Value.
tab.sort();
if(valeur>tab[tab.length])
{
tab.pop();
tab.push(valeur);
}
Remarque :
Attention ! Modifie le tableau en entrée (le trie)