2012-03-23 35 views
1

我正在使用插入排序来对字串列表(EmailingListArray下面)进行排序。 EmailingListArray[1]是一个包含名称的数组。 EmailingListArray[2]包含相应的电子邮件。 我在排序EmailingListArray[1],当它内部发生变化时,它也会更改第二个数组,从而将它们排序在一起。 做事的一个尴尬的方式,我知道,但它的课程,我希望把插入排序在什么地方,试图得到一个额外的标记:L不能在Delphi插入排序算法中找到简单的错误

这里是我的代码

//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。 该程序没有崩溃或任何东西,所以它应该至少显示“你好?”最后。 它不排序我的阵列。 我也不确定算法写得是否正确,我从教科书中找到了它。 任何帮助将不胜感激!

回答

3

如果你想获得一个好成绩:

  1. 避免给人误导性名称为您的变量:

    • CurrentPointer应该叫CurrentIndexCurrentPosition因为它是一个指标,而不是一个指针
    • Pointer是要避免的(保留为指针类型)以及更多,因为它不是一个指针;应该WorkIndexWorkPosition
  2. 阅读插入排序算法(wikipedia有数组索引值从0简单的伪代码),并正确地实现它:

    WorkIndex := CurrentIndex - 1; // - not + in your "Pointer := CurrentPointer + 1;"

  3. 让你的索引范围from 0 to Count-1为一个TStrings

  4. 不要混淆了2列:
    EmailingListArray[2][WorkIndex + 1] := CurrentValue2; // not CurrentValue

更新:错过了坏而条件从零开始的数组。

2bis。虽然条件应符合> = 0,而不是> 0

while ((EmailingListArray[1][WorkIndex] > CurrentValue) AND (WorkIndex >= 0)) do 
+0

谢谢,现在它的排序很好,只有一个问题,它不是排序的第一个项目。想想那是你指的第3点,但不知道该怎么办:S – JamesB123 2012-03-23 20:35:46

+1

@ JamesB123,看我的更新... – 2012-03-23 21:08:09

+0

谢谢你!欣赏它:) – JamesB123 2012-03-23 23:51:26