Консультация № 180775
15.11.2010, 22:23
53.02 руб.
16.11.2010, 09:04
0 10 2
Здравствуйте.

У меня такой вопрос:

Мы производим сортировку массива методом прямого выбора. Например, массив 'ВОРАЛЕКС'. Как я понимаю, процесс сортировки происходит так: мы берем первый элемент, просматриваем на наличие наименьшего. Элементы, которые меньше первого, отмечаем (например, точками). Потом оттуда выбираем наименьший, и обмениваем его местами с первым.

Преподаватель говорит, что это не так и задает два вопроса:

1) В массиве 'АВЕОЛРКС' с чем сравнивается элемент 'Р'?
2) По какому принципе ставятся точки (см. картинку в приложении)?
3) Как происходит сама сортировка?

Заранее спасибо за ответ!

Приложение:

Обсуждение

давно
Профессор
230118
3054
16.11.2010, 03:27
общий
это ответ
Здравствуйте, Vilgelm!


Алгоритм сортировки массва по возрастанию методом прямого выбора может быть представлен так:

1. Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый- на место минимального.

2. Проссматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй- на место минимального.

3. И так до предпоследнего элемента.

1. Р сравнивается со всеми элементами, начиная с четвертого
2 Точки ставить не надо.
давно
Мастер-Эксперт
680
2811
16.11.2010, 07:21
общий
Не знаю, в чем подвох, но тут все предельно просто.
Мы берем массив, начиная с первого элемента, находим минимальный, ставим его на первое место, а первый элемент - на место минимального. Затем берем начиная со второго, находим минимальный, ставим его на второе место, а второй - на место минимального.
И так до конца.
Т.е. не среди тех, кто меньше, выбираем еще и минимальный, этого уже не нужно делать, он выбран уже как минимальный из всех оставшихся. И Ваш преподаватель прав, что неправильно.
А точками отмечаем те элементы, которые меньше очередного (сперва - первого; потом - которые меньше второго; потом - которые меньше третьего и т.д.), но не все. Т.е. если какой-то элемент массива меньше очередного, но больше минимального, и минимальный уже найден (попался раньше), то над таким элементом точка не ставится уже (если бы был массив ГЛАВРЫБ, то в первом цикле были бы отмечены Г и А, но В и Б уже бы не отмечались).
Теперь - зачем эти точки (вообще-то они как таковые и не нужны). Возможно, их придумали, чтоб Вы лучше поняли, как работает алгоритм.
Для запоминания минимального числа (в программе будет хранится его индекс, т.е. номер его положения в массиве) используется дополнительная переменная. Точками обозначаются элементы массива, индексы которых запоминаются в определенный момент времени, т.к. они по очереди в ней будут храниться.
В массиве 'АВЕОЛРКС' элемент 'Р' сравнивается с 'Л'.
Если по шагам разбирать, то там вот что происходит: на этом шаге во внутреннем цикле исследуется 'ОЛРКС' на поиск минимального элемента. Сперва запомнили как минимальный элемент исследуемого массива 'O' (т.е начальный элемент исследуемого массива). Далее начинается внутренний цикл. Сравниваем второй элемент исследуемого массива 'Л' с этим минимальным (который равен сейчас 'O') и видим, что 'Л' меньше, следовательно, минимальным элементом становится 'Л'. Далее берем следующий элемент, это 'Р'. Сравниваем с минимальным (который в данный момент равен 'Л'). 'Р' больше, поэтому минимальным элементом остается 'Л'. Потом берем следующий элемент, это 'К'. Сравниваем с минимальным (который в данный момент равен 'Л'). 'К' меньше, поэтому минимальный элемент становится равным 'К'. Далее берем следующий элемент, это 'С'. Сравниваем с минимальным, 'С' больше 'К', поэтому минимальный остается равным 'К'. Слово закончилось, внутренний цикл закончился.
А на вопрос "Как происходит сама сортировка" какой именно требуется ответ? Словесное описание или блок-схема пойдет с комментариями?
давно
Академик
320937
2216
16.11.2010, 11:08
общий
это ответ
Здравствуйте, Vilgelm!

1) В массиве 'АВЕОЛРКС' с чем сравнивается элемент 'Р'?
Распишем все сравнения буквы Р по шагам:
1. (В, Р)
2. (О, Р)
3. (Р, О)
4. (Л, Р)
5. (Л, Р)
6. (Р, О)
7. (Р, С)
В частности, обработка массива 'АВЕОЛРКС' выполняется на 4-м шаге.
При этом b'=<А,В,Е>
b''=<О,Л,Р,К,С>. Принимаем min='О'.
Сравниваем min с Л. Л меньше, теперь min=Л
Сравниваем min с Р (то есть, сравниваем Л с Р, поскольку min=Л)
Никаких других сравнений с Р на этом шаге нет.

2) По какому принципу ставятся точки
Точки ставятся под текущим минимумом.
Знаком подчеркивания отмечены элементы неупорядоченного списка b''
Стрелочками отмечен обмен элементов (если он имеет место)

3) Как происходит сама сортировка?
Модель сортировки.
Список b условно разбивается на два подсписка: упорядоченный b' и оставшийся b''.
b' первоначально пуст
b'' первоначально равен исходному списку b
b' получается путем выборки из b'' минимального элемента и добавлением его в конец b'

Рассмотрим 1 шаг.
b'=<>
b''=<'В','О','Р','А','Л','Е','К','С'>
Самый левый элемент b'' считаем минимальным min='B', точку ставим.
min<'О', точку не ставим.
min<'Р', точку не ставим.
min>'А', min='A'. точку ставим.
'Л','Е','К','С' больше текущего min, точки не ставим.
Сравниваем самый левый элемент, отмеченный точкой, с самым правым элементом, отмеченным точкой (то есть с текущим min). Так как эти элементы не совпадают (то есть точек, как минимум, две), обмениваем элементы местами. Таким образом к упорядоченный список b' =<'А'>,
неупорядоченный список b''=<'О','Р','В','Л','Е','К','С'>.
На 5-шаге точка одна, обмен не происходит
Источник. Проценко В.С., Чаленко П.И., Сорока Р.А. Техника программирования: Учеб.пособие. Киев: Выща шк., 1990
давно
Академик
320937
2216
16.11.2010, 18:15
общий
Добрый вечер! Мне кажется, что точки при рассмотрении этой сортировки имеют большое методическое значение. Наверно, преподаватель не разъяснил, что эти точки не воспринимаются статично, как окончательная данность, а ставятся последовательно, то есть в динамике.
Неизвестный
16.11.2010, 18:31
общий
Здравствуйте.

Всем огромное спасибо за ответы, теперь более менее понятно По поводу сортировки понятно, но вот сегодня меня огорошили ещё одним вопросом: а как именно происходит нахождение минимального элемента в массиве? Буду очень признателен за ответ!

Цитата: Сучкова Татьяна Михайловна
А на вопрос "Как происходит сама сортировка" какой именно требуется ответ? Словесное описание или блок-схема пойдет с комментариями?


Думаю, что словесного описания будет достаточно, хотя лично для себя хотелось бы увидеть блок-схему
давно
Профессор
230118
3054
16.11.2010, 18:39
общий
Первый элемент принимаем за текущий минимальный. Сравниваем текущий минимальный со всеми элементами. Как только будет найден элемент меньший, меняем текущий минимальный на него.
давно
Академик
320937
2216
16.11.2010, 18:40
общий
Пусть минимальный элемент - первый. Если второй элемент МЕНЬШЕ минимального, то минимальный второй, ...
Код:
min:=a[1];
for i:= 2 to n do
if a[i]<min then
min := a[i];


Код:
min=a(1)
for i= 2 to n
if a(i)<min then
min = a(i)
end if
next
Неизвестный
16.11.2010, 19:46
общий
Всем огромное спасибо!
давно
Академик
320937
2216
16.11.2010, 20:56
общий
Удачи! Заходите еще :)
давно
Академик
320937
2216
16.11.2010, 22:38
общий
Добавил несколько строк в ответ по 4-му шагу. Знающие люди говорят, что так понятней :)
Форма ответа