マイナスを含む小数のソート

解決


たまねぎけんし  2007-10-17 20:58:06  No: 28059

-10.0
-1.0
0.0
1.0
10.0
100.0

上記のような、マイナス、小数を含む数値のソート方法を教えて頂けないでしょうか。

CompareStrを使用する為に、パディングをしてみたりしたのですが、上手くいかず。。。

宜しくお願いします。


ん?  2007-10-17 21:19:55  No: 28060

文字じゃなく、数値化してから比較したら?


deldel  2007-10-18 01:50:25  No: 28061

ここはどうですか?
あまり読んではないのですが^^;

http://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/quick/quick.html


うんと  2007-10-18 03:34:49  No: 28062

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;


たまねぎけんし  2007-10-19 02:17:39  No: 28063

皆さんありがとうございます。

うんとさんの方法を参考にやったら出来ました〜。
ありがとうございましたm(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加