插入排序 - TStringList Delphi

Insertion Sort - TStringList Delphi

我正在尝试使用插入和选择排序对文本文件中的整数 TStringList 进行排序。选择排序工作正常,但插入排序不适用于我的代码。有人可以告诉我哪里错了吗?我的 'numbers.txt' 有 5000 行数字。提前致谢

更新:我稍微编辑了我的代码,它现在可以使用插入排序,但它只对图像上的 4 个整数索引进行排序

var
  i, Position, n: integer;
  Value: string;
begin
  n := Items.Count;
  for i := 1 to n - 1 do
  begin
    Value := Items[i];
    Position := i-1;
     while (Position >0) and (Items[Position]>Value) do
      begin
        Items[Position+1]:= Items[Position]  ;
        Position := Position -1 ;
        end;
        Items[Position+1] := Value;
  end;
end;

图像中的数据排序完全正确,因为您排序的是字符串值,并且根据您进行的比较,排序是完美的。 "1143" 恰好位于字符串值 "11413""11443" 之间,因为比较是逐字符进行的,直到最短值的长度。 "1141" < "1143" < "1144",基于每个字符串的前四个字符。

如果你想要一个实际的整数排序,那么你需要在比较它们之前将两个值转换为整数。这样的事情应该可行(注意我没有测试你的整体排序逻辑——我只是使用了证明这个概念的值):

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes;

var
  i, Position, n: integer;
  Value: integer;
  Items: TStringList;
begin
  Items := TStringList.Create;
  try
    Items.DelimitedText := '1116,11170,11178,11206,1122,11221,11228';
    n := Items.Count;
    for i := 1 to n - 1 do
    begin
      Value := StrToInt(Items[i]);
      Position := i - 1;
       while (Position > 0) and (StrToInt(Items[Position]) > Value) do
        begin
          Items[Position + 1]:= Items[Position];
          Position := Position - 1 ;
        end;
        Items[Position+1] := IntToStr(Value);
    end;
    for i := 0 to Items.Count - 1 do
      WriteLn(Items[i]);
  finally
    Items.Free;
  end;
  ReadLn;
end.

我在控制台中从上面的代码得到的输出 window:

1116
1122
11170
11178
11206
11221
11228