Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Алгоритм сортировки

Автор RawonaM, ноября 4, 2011, 14:27

0 Пользователи и 1 гость просматривают эту тему.

RawonaM

def min_max(A, l, r):
    if r-l>1:
        min = min_i(A, l, r)
        swap(A, l, min)
        max = max_i(A, l, r)
        swap(A, r, max)
        min_max(A, l+1, r-1)
    elif r-l==1:
       if A[l]>A[r]:
          swap(A, l, r)

Как вы думаете, этот алгоритм сработает для всех инпутов?

Alone Coder


RawonaM

swap меняет местами два элемента по заданным индексам.
min_i, max_i возвращает индекс минимального и максимального элемента в заданном промежутке.

Alone Coder

Цитата: RawonaM от ноября  4, 2011, 19:04
min_i, max_i возвращает индекс минимального и максимального элемента в заданном промежутке.
Тормоз же.



RawonaM

Это не имеет значения. Алгоритм рабочий, думаете?

orang_baik

В случае, когда массив из одного элемента состоит r-l=0, а такой вариант не предусмотрен.

RawonaM

Предусмотрен. Массив из одного элемента уже упорядочен.

orang_baik

Цитата: RawonaM от ноября  4, 2011, 19:17
Предусмотрен. Массив из одного элемента уже упорядочен.
Программа не знает, какой ей массив дают, отсортированный или нет. Или это программа для массивов длины >=2? Тогда надо вставить проверку длины массива.

orang_baik

И потом, если число элементов нечётное, то настанет момент, когда сортируемый участок сузится до одного элемента, и что с ним делать непонятно.

RawonaM

Цитата: orang_baik от ноября  4, 2011, 19:19
Цитата: RawonaM от ноября  4, 2011, 19:17Предусмотрен. Массив из одного элемента уже упорядочен.
Программа не знает, какой ей массив дают, отсортированный или нет.
orang_baik, массив из одного элемента ВСЕГДА отсортирован, этот случай проверять не нужно.
Попробуйте добавить случай r-l=0, какие действия вы хотите делать?

Alone Coder

Цитата: RawonaM от ноября  4, 2011, 19:09
Это не имеет значения. Алгоритм рабочий, думаете?
Скорее всего, рабочий, но это не имеет значения - он тормозной же.

arseniiv


orang_baik

Цитата: RawonaM от ноября  4, 2011, 19:27
Цитата: orang_baik от ноября  4, 2011, 19:19
Цитата: RawonaM от ноября  4, 2011, 19:17Предусмотрен. Массив из одного элемента уже упорядочен.
Программа не знает, какой ей массив дают, отсортированный или нет.
orang_baik, массив из одного элемента ВСЕГДА отсортирован, этот случай проверять не нужно.
Попробуйте добавить случай r-l=0, какие действия вы хотите делать?
Завершить выполнение программы.
Если массив из трёх элементов состоит.
Запустили min_max(A,1,3),3-1>1, выполняется первая ветка и запускается min_max(A,2,2),2-2=0 и что дальше?

RawonaM

Цитата: Alone Coder от ноября  4, 2011, 19:30
Цитата: RawonaM от ноября  4, 2011, 19:09Это не имеет значения. Алгоритм рабочий, думаете?
Скорее всего, рабочий
Мне вот тоже так кажется.

RawonaM

Цитата: orang_baik от ноября  4, 2011, 19:33
Завершить выполнение программы.
Это то, что и просходит.

Цитата: orang_baik от ноября  4, 2011, 19:33
Запустили min_max(A,1,3),3-1>1, выполняется первая ветка и запускается min_max(A,2,2),2-2=0 и что дальше?
Все, сортировка закончена.

orang_baik

Если эта функция\процедура не должна ничего возвращать, тогда ничего не надо.

arseniiv

С помощью swap она изменяет входной массив, зачем возвращать?

Hellerick

Цитата: arseniiv от ноября  5, 2011, 17:12
С помощью swap она изменяет входной массив, зачем возвращать?

Изменит только в пределах самой себя. В основном теле программы ничего не изменится.

RawonaM

Если передача параметров по референсу, то изменится.

В следущий раз буду выкладывать псевдокод, чтобы не было тенденции конкретную имплементацию обсуждать. :)

Просто раз я уже на питоне накалякал, так решил так и выложить.

Hellerick

Цитата: RawonaM от ноября  5, 2011, 17:34
Если передача параметров по референсу, то изменится.

По кому?  :what:

Цитата: RawonaM от ноября  5, 2011, 17:34
В следущий раз буду выкладывать псевдокод, чтобы не было тенденции конкретную имплементацию обсуждать. :)

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

А то я прочитал переменные как «А, И, Р», и долго не мог врубиться, что они суть такое.


RawonaM

Цитата: Hellerick от ноября  5, 2011, 17:39
В следующий раз внятно описывайте, что за переменные используются, или давайте им говорящие имена.

А то я прочитал переменные как «А, И, Р», и долго не мог врубиться, что они суть такое.
В этом был и прикол, так у меня в задании и дано.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр