@yellow_pus

Правильно ли я реализовал сортировку timsort на php?

Узнал про timsort, решил реализовать его на пхп, появилось несколько вопросов. На википедиях и статьях, сортировку делят на 3 этапа, я реализовал их в классе вот так:
class Tim
{
    public $arr = [2, 5, 3, 8, 10, 200, 1];
    public $pivot;

    public $min = [];
    public $great = [];

    public function sort($arr)
    {
        // 1) Делим массив на 2 подмассива, в min - меньшие, в great - большие
        if (count($arr) <= 1) return $arr;
        $this->pivot = floor(count($arr) / 2);
        for ($i = 0; $i < count($arr); $i++) {
            if ($i == $this->pivot) continue;
            if ($arr[$i] < $arr[$this->pivot]) {
                $this->min[] = $arr[$i];
            }
            if ($arr[$i] > $arr[$this->pivot]) {
                $this->great[] = $arr[$i];
            }
        }
        // 2) Сорируем эти массивы пузырьком
        for ($i = 0; $i < count($this->min) - 1; $i++) {
            for ($j = $i + 1; $j < count($this->min); $j++) {
                if ($this->min[$i] > $this->min[$j]) {
                    $tmp = $this->min[$i];
                    $this->min[$i] = $this->min[$j];
                    $this->min[$j] = $tmp;
                }
            }
        }
        for ($i = 0; $i < count($this->great) - 1; $i++) {
            for ($j = $i + 1; $j < count($this->great); $j++) {
                if ($this->great[$i] > $this->great[$j]) {
                    $tmp = $this->great[$i];
                    $this->great[$i] = $this->great[$j];
                    $this->great[$j] = $tmp;
                }
            }
        }
        // 3) Соединяем массивы
        return array_merge($this->min, [$this->arr[$this->pivot]], $this->great);
    }
}

На просторах интернета не нашел простого примера, где бы поэтапно рассказывалось бы про эту сортировку и одновременно показывали пример на пхп, поэтому я попробовал реализовать её сам, правильно ли я сделал?
Если да, то по логике, получившиеся массивы(с минимальными и большими значениями) мы сортируем пузырьковой сортировкой, что разве не должно замедлять её?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Неверно от начала, до конца.
https://ru.wikipedia.org/wiki/Timsort
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы