gpt4 book ai didi

delphi - 在德尔福插入排序算法中找不到简单的错误

转载 作者:行者123 更新时间:2023-12-03 19:43:55 26 4
gpt4 key购买 nike

我正在使用插入排序对字符串列表(下面的 EmailingListArray)进行排序。EmailingListArray[1]是一个包含名称的数组。EmailingListArray[2]包含相应的电子邮件。
我正在整理 EmailingListArray[1]当其中的某些内容发生变化时,它也会更改第二个数组,因此它们被排序在一起。
我知道这是一种尴尬的做事方式,但这是为了类(class)作业,我想在某个地方放置一个插入排序来尝试获得额外的分数:L

这是我的代码

//quick check to make sure array contains correct values
for first := 0 to EmailingListArray[1].Count do
ShowMessage(EmailingListArray[1][first]);

//then sort
First := 0;
Last := EmailingListArray[1].Count;
for CurrentPointer := First +1 to Last-1 do
begin
CurrentValue := EmailingListArray[1][CurrentPointer];
CurrentValue2 := EmailingListArray[2][CurrentPointer];
Pointer := CurrentPointer + 1;
while ((EmailingListArray[1][Pointer] > CurrentValue) AND (Pointer > 0)) do
begin
EmailingListArray[1][Pointer+1] := EmailingListArray[1][Pointer];
EmailingListArray[2][Pointer+1] := EmailingListArray[2][Pointer];
pointer := Pointer -1;
end;
EmailingListArray[1][Pointer + 1] := CurrentValue;
EmailingListArray[2][Pointer + 1] := CurrentValue;
end;

//show message at the end for a check
ShowMessage('hello?');

消息“你好?”由于某种原因没有显示:S。
该程序没有崩溃或任何事情,所以它真的应该至少显示“你好?”在末尾。
它也没有对我的数组进行排序。
我也不确定算法是否正确编写,我是从我们的教科书中得到的。
任何帮助将非常感激!

最佳答案

如果你想获得好成绩:

  • 避免为变量提供误导性名称:
  • CurrentPointer应该叫 CurrentIndexCurrentPosition因为它是索引而不是指针
  • Pointer应避免(为 指针 类型保留)等等,因为它不是指针;应该是 WorkIndexWorkPosition
  • 阅读插入排序算法(wikipedia 有一个从 0 开始索引的数组的简单伪代码)并正确实现它:
    WorkIndex := CurrentIndex - 1; // - not + in your "Pointer := CurrentPointer + 1;"
  • 获取您的指数范围from 0 to Count-1对于 TStrings .
  • 不要混淆这两个数组:EmailingListArray[2][WorkIndex + 1] := CurrentValue2; // not CurrentValue

  • 更新:错过了基于零的数组的错误条件。

    2之二。虽然条件应该是> = 0,而不是> 0
    while ((EmailingListArray[1][WorkIndex] > CurrentValue) AND (WorkIndex >= 0)) do

    关于delphi - 在德尔福插入排序算法中找不到简单的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844641/

    26 4 0