-10.0
-1.0
0.0
1.0
10.0
100.0
上記のような、マイナス、小数を含む数値のソート方法を教えて頂けないでしょうか。
CompareStrを使用する為に、パディングをしてみたりしたのですが、上手くいかず。。。
宜しくお願いします。
文字じゃなく、数値化してから比較したら?
ここはどうですか?
あまり読んではないのですが^^;
http://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/quick/quick.html
TList などのリストクラスにはクイックソートがついていますね。
変数を Double の配列にとって、TList で昇順に並べて表示するには、以下のようにします。
var
num: array of double;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(num, 6);
num[0] := 1.1;
num[1] := -11.1;
num[2] := -3.3;
num[3] := 5.5;
num[4] := -6.6;
num[5] := 9.9;
end;
Memo1 には
-11.1
-6.6
-3.3
1.1
5.5
9.9
と表示されます。
function Shoujun(Item1, Item2: Pointer): Integer;
var
d: double;
begin
d := PDouble(Item1)^ - PDouble(Item2)^;
if d > 0 then
result := 1
else
if d < 0 then
result := -1
else
result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ll: TList;
i, v: integer;
begin
ll := Tlist.Create;
try
for i := 0 to Length(num)-1 do ll.Add(@num[i]);
ll.Sort(@Shoujun);
for i := 0 to Length(num)-1 do
Memo1.Lines.Add(FloatToStr(PDouble(ll[i])^));
finally
ll.Free;
end;
end;
皆さんありがとうございます。
うんとさんの方法を参考にやったら出来ました〜。
ありがとうございましたm(_ _)m
ツイート | ![]() |