Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 插入排序-TStringList Delphi_Sorting_Delphi_Insertion_Tstringlist - Fatal编程技术网

Sorting 插入排序-TStringList Delphi

Sorting 插入排序-TStringList Delphi,sorting,delphi,insertion,tstringlist,Sorting,Delphi,Insertion,Tstringlist,我正在尝试使用插入和选择排序对文本文件中的整数进行排序。选择排序正常,但插入排序不适用于我的代码。有人能告诉我哪里错了吗?我的'numbers.txt'有5000行数字。提前谢谢 更新:我已经编辑了我的代码,它现在可以使用插入排序,但是它只对图像上的4个整数索引进行排序 var i, Position, n: integer; Value: string; begin n := Items.Count; for i := 1 to n - 1 do begin Val

我正在尝试使用插入和选择排序对文本文件中的整数进行排序。选择排序正常,但插入排序不适用于我的代码。有人能告诉我哪里错了吗?我的'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”,基于每个字符串的前四个字符

如果需要实际的整数排序,则需要在比较这两个值之前将其转换为整数。类似的方法应该可以工作(注意,我没有测试您的整体排序逻辑-我只是使用了一些值来演示这个概念):

我在控制台窗口中从上面的代码中获得的输出:

1116
1122
11170
11178
11206
11221
11228

欢迎来到StackOverflow!您的代码甚至无法编译:缺少一个“then”。它既不能作为插入排序也不能作为插入排序。这种排序是在动态构建列表时完成的,从空列表开始,扫描项目的正确位置并将其插入其中或添加到列表末尾。另外,为什么不将所有文本转换为整数呢?排序可能会更快,但排序顺序并不相同,除非所有整数的长度相同,并且都用零填充。此表达式是错误的:
如果Position Done:=true
请使用调试器自行解决。从简单的输入数据开始,逐步建立起来。非常感谢!!确保使用不同顺序的测试集进行测试。如果第一个值是最大值之一,您会感到惊讶。使用一个小集合,说“5”、“2”、“1”,然后按照代码所做的操作,用F8逐步完成代码。
1116
1122
11170
11178
11206
11221
11228