Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3

Быстрая сортировка


Mystic ©   (18.12.18 15:06[40]

Во-первых, можно использовать быструю сортировку, но переключаться на пирамидальную в случае, когда максимальный размер неосортированного сокращается мало.

Во-вторых, есть стратегия выбора элемента, с которым должно производится сравнение: P := (L + R) shr 1; Тут большой простор для творчества. Бери рандомный элемент из диапазона [L, R] и уже тебе будет грубоко наплевать на то, какое хитрое наполнение было в массиве.


Тимохов Дима ©   (14.01.19 09:42[41]


> Sha ©   (16.12.18 20:57) [36]

Александр, приветствую!

С завалами разобрался, пришло время использовать быструю сортировку от Sha))

Попытался разобраться, но не вышло. Напрямую у меня не компилируется с ошибкой на строке 134 - cannot access property (у меня Delphi2007).
Решил поправить код на прямое использование TStrings.Strings вместо List.
Естественно, т.к. используется удвоенный индекс, то валится с ошибкой - list index out of bounds.

Если не сложно, то прокомментируй, пожалуйста, смысл строк 134 и 135.
Я в принципе не могу понять, как параметр List соотносится с реальными строками в TStringList.TList.

Спасибо.


sniknik ©   (14.01.19 10:31[42]

0 целых чз. десятых... не замерял, но быстро, моментально просто...

   with TStringList.Create() do
   try
     Sorted:= true;
     LoadFromFile('data.txt');
     //Sort();
     SaveToFile('Sort.txt');
   finally
     Free();
   end;
 except
   on E:Exception do
     Writeln(E.Classname, ': ', E.Message);
 end;

в твоем случае похоже длинный и уже отсортированный список, для квиксорта нечего "делить", самый неудачный вариант для квиксорта.


sniknik ©   (14.01.19 10:42[43]

вернее, нужно добавить, а то у тебя там часть дублирующихся значений, которые в "выходном" файле пропадают
  with TStringList.Create() do
  try
    Sorted:= true;
    Duplicates:= dupAccept;
    LoadFromFile('data.txt');
    //Sort();
    SaveToFile('Sort.txt');
  finally
    Free();
  end;
except
  on E:Exception do
    Writeln(E.Classname, ': ', E.Message);
end;


Sha ©   (14.01.19 13:56[44]

> Тимохов Дима ©   (14.01.19 09:42) [41]
> Если не сложно, то прокомментируй, пожалуйста, смысл строк 134 и 135.

Смысл в том, чтобы получить адрес первого элемента динамического массива.


Страницы: 1 2 3 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо