Конференция "Прочее" » Быстрая сортировка
 
  • 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.

    Смысл в том, чтобы получить адрес первого элемента динамического массива.
 
Конференция "Прочее" » Быстрая сортировка
Есть новые Нет новых   [118642   +47][b:0][p:0.001]