2012-03-23 1 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 следует назвать CurrentIndex или CurrentPosition как это индекс, а не указатель
    • Pointer следует избегать (зарезервировано для Указатель) и тем более, что это не указатель; должны быть WorkIndex или WorkPosition
  2. Читать алгоритм вставки сортировки (wikipedia имеет простой псевдокод массива индексируются от 0) и реализовать его правильно:

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

  3. Получите ваш выбор индекса from 0 to Count-1 для a TStrings.

  4. Не перепутать 2 массива:
    EmailingListArray[2][WorkIndex + 1] := CurrentValue2; // not CurrentValue

Update: Пропущенный плохо в то время как условие для массива на основе нулевой.

2bis. В то время как условие должно быть с> = 0, не> 0

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

Спасибо, его сортировка хорошо сейчас, только одна проблема, не сортировка самого первого элемента. Подумайте, что вы имели в виду под пунктом 3, но не знаете, что делать: S – JamesB123

+1

@ JamesB123, см. Мое обновление ... –

+0

Спасибо человеку! Ценить это :) – JamesB123

 Смежные вопросы

  • Нет связанных вопросов^_^