2012-03-23 33 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