Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Сортировка методом прямого обмена



Оба разбиравшихся выше метода можно тоже рассматривать как «обменные» сортировки.

Для рассматриваемого ниже метода обмен местами двух элементов представляет собой характерную особенность процесса.

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

Как и в методе прямого выбора, мы повторяем проходы по массиву, сдвигая каждый раз наименьший элемент «оставшейся» части последовательности к левому концу массива.

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

Текстовый алгоритм:

1. Начало.

2. Выполнить цикл, пока i имеет значения от 2 до N,
шаг = +1:

а) выполнить цикл, пока j имеет значения от N до i, шаг = -1:

тело цикла: если А(j-1) > А(j), то меняем местами эти два элемента.

3. Конец.

На рисунке 5 представлена блок-схема сортировки методом прямого обмена.

 

 

Рис. 5. Блок-схема сортировки методом прямого обмена

 

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

Сортировка методом прямого обмена имеет меньшую эффективность. Число шагов просмотра с обменом ≤ (n – 2), и из-за того, что «легкие» элементы «всплывают» по несколько сразу, то кажется, что сортировка происходит быстро. Но с другой стороны, «тяжелые» элементы, если они находятся наверху, перемещаются вниз на одну позицию при каждом шаге, что увеличивает время сортировки. Число обменов элементов оказывается довольно большим.

На рисунке 6 приведен пример сортировки методом прямого обмена.

 

 

Исходная последовательность I = 1 I = 2 I = 3 I = 4 I = 5 I = 6 I = 7 I = 8
06
  42

 

Рис. 6. Пример сортировки методом прямого обмена

 

Сортировка бинарными включениями

 

Идея метода сходна с сортировкой прямыми включениями. Так же из неотсортированной части на i-ом шаге извлекается i-ый элемент, которому ищется место в уже «готовой» части последовательности. Однако процесс поиска места включения протекает в несколько раз быстрее.

Суть метода заключается в следующем:

Часть последовательности до испытуемого (i-ого) элемента («готовая» часть) делится пополам и i-ый элемент сравнивается с элементом, стоящим на середине, после чего границы поиска уменьшаются в два раза. Получившийся полуинтервал делится пополам, и процесс повторяется до тех пор, пока не будет определено место включения i-ого элемента. Затем происходит сдвиг вправо на одну позицию тех элементов, которые расположены от места включения до i-ого элемента, освобождая таким образом позицию для i-ого элемента.

Текстовый алгоритм:

1. Начало.

2. Выполнить цикл, пока I имеет значение от 2 до N с шагом = 1

а) X = A(i), l = 1, r = i-1

б) Если l > r, то:

1) выполнить цикл, пока j имеет значение от (i-1) до l с шагом = -1

тело цикла: A(j + 1) = A(j)

2) присвоить A(l) = X

иначе:

1) присвоить m = (l + r) \ 2

2) если X < A(m), то r = m – 1 иначе l = m + 1

3) перейти к пункту б).

3. Конец.

На рисунке 7 приведен пример выполнения сортировки бинарными включениями.

 

Исходная последовательность
I = 2 44
I = 3 44
I = 4 94
I = 5 42
I = 6 12
I = 7 94
I = 8
Результат

 

Рис. 7. Пример выполнения сортировки бинарными
включениями

 

На рисунке 8 представлена блок-схема сортировки бинарными включениями.

 

Рис. 8. Блок-схема сортировки бинарными включениями

 

Шейкер – сортировка

 

Как и алгоритм сортировки прямого обмена, алгоритм шейкер – сортировки основан на сравнении и смене мест пары соседних элементов. Однако в рассматриваемом методе каждый шаг состоит из двух этапов.

На первом этапе наименьший элемент неотсортированной части последовательности сдвигается к левому краю этой части, а наибольший элемент из оставшейся неотсортированной части сдвигается к правому краю этой части массива. После выполнения данных этапов неотсортированная часть массива уменьшается на два элемента. Шаги выполняются, пока не будет отсортирован весь массив.

Текстовый алгоритм:

1. Начало.

2. Присвоить переменной t (слева массива) значение 2, переменной r (справа массива) и переменной k – значение количества элементов массива.

3. Выполнить цикл, пока i имеет значение от r до t с шагом = -1:

а) если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.

4. Присвоить переменной t значение = k + 1.

5. Выполнить цикл, пока i имеет значение от t до r с шагом = 1:

а) если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.

6. Присвоить переменной r значение = k – 1.

7. Если t > r, то идти к пункту 8, иначе идти к пункту 3.

8. Конец.

На рисунке 9 представлен пример выполнения шейкер – сортировки по шагам.

 

Исходная последовательность 44
1-й шаг 1-й этап 12 94
2-й этап
2-й шаг 1-й этап
2-й этап
3-й шаг 1-й этап
Результат

 

Рис. 9. Пример выполнения шейкер – сортировки

На рис. 10 приведена блок-схема шейкер – сортировки.

Рис. 10. Блок-схема шейкер – сортировки

Из примера, приведенного на рисунке 9 видно, что после первого шага длина неотсортированной части уменьшилась на два элемента, а после второго шага длина неотсортированной части вместо двух уменьшилась сразу на 4 элемента. Это дополнительное уменьшение обеспечивает переменная k, показывающая при каком значении i был совершен последний обмен местами двух элементов. Благодаря переменной k быстрее увеличивается и быстрее уменьшается левая (t = k + 1) и правая (r = k – 1) границы неотсортированной части.

 

ПОРЯДОК ВЫПОЛНЕНИЯ

 

1. Получить задание у преподавателя.

2. Выполнить задание в соответствии с вариантом.

3. Ответить на контрольные вопросы.

 

ЗАДАНИЕ

 

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

1. Известен список фамилий и рост учеников класса. Напечатать в порядке возрастания роста список детей, используя метод шейкер – сортировки.

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

3. Известен список биатлонистов и результаты их стрельбы на двух огневых рубежах (попадания). На каждом рубеже пять мишеней. Напечатать общий список биатлонистов в порядке убывания результата на втором огневом рубеже, используя метод прямого выбора.

4. Известен список студентов группы и количество пропущенных часов каждым из студентов. Напечатать список студентов в порядке возрастания количества пропущенных часов (если пропуски имеют место), используя сортировку прямыми включениями.

5. Известен список рабочих и их месячный заработок. Напечатать список рабочих в порядке убывания зарплаты, используя метод сортировки прямыми включениями.

6. Задан числовой массив, состоящий из J элементов. Напечатать отрицательные числа в порядке возрастания по модулю, используя шейкер – сортировку.

7. Задан числовой массив, состоящий из J элементов. Напечатать положительные числа в порядке убывания, используя метод прямого выбора.

8. Известен список фамилий и вес студентов вашей группы.

Напечатать в порядке возрастания список студентов, вес которых не меньше среднего веса всей группы. Для этого использовать метод сортировки бинарными включениями.

9. Дан одномерный массив из I целых чисел. Напечатать отрицательные числа в порядке возрастания по модулю, а положительные числа в порядке убывания, используя метод прямого обмена.

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

11. Известен список спортсменов и результат их прыжков в длину. Напечатать в порядке убывания тех, чей результат меньше 3 метров, используя сортировку прямого выбора.

12. Известен список спортсменов и результат их прыжков в длину. Напечатать в порядке возрастания тех, чей результат больше 3 метров, используя шейкер – сортировку.

13. Известен список фамилий и рост учеников класса. Напечатать в порядке убывания тех, чей рост меньше 160 см, используя сортировку бинарными включениями.

14. Известен список фамилий и рост учеников класса. Напечатать в порядке возрастания тех, чей рост больше 160 см, используя сортировку прямого обмена.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

 

1. Что такое сортировка?

2. Объясните суть метода сортировки методом прямого включения.

3. Объясните суть метода сортировки методом прямого выбора.

4. Объясните суть сортировки методом прямого обмена.

5. Объясните суть сортировки бинарными включениями.

6. Объясните суть шейкер – сортировки.

7. Что обеспечивает дополнительное уменьшение неотсортированной части в шейкер – сортировки?

 

СПИСОК ЛИТЕРАТУРЫ

 

1. Информатика: Базовый курс: учеб. пособие для студентов втузов / под ред. С. В. Симоновича. – Санкт-Петербург.: Питер, 2010. – 640 с.

2. Таганов, Л. С. Информатика [Электронный ресурс]: учеб. пособие для студентов техн. специальностей и направлений / Л. С. Таганов, А. Г. Пимонов; ГОУ ВПО «Кузбас. гос. техн. ун-т». – Кемерово, 2010. – 330 с.

3. Попов, А. М. Информатика и математика: учеб. пособие для студентов вузов, обучающихся по специальности " Юриспруденция" (030501) / А. М. Попов, В. Н. Сотников, Е. И. Ногаева; под ред. А. М. Попова – Москва.: ЮНИТИ-ДАНА, 2008. – 303 с. http: // www.iqlib.ru

 

Лабораторная работа № 6
Процедуры и функции

 

ЦЕЛЬ РАБОТЫ

 

Изучение синтаксиса стандартных строковых процедур и функций, встроенных в язык программирования высокого уровня Visual Basic for Applications (VBA), получение навыков применения строковых процедур и функций в программах пользователя при работе с данными строкового типа.

 

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 


Поделиться:



Популярное:

  1. Антикоагулянты непрямого действия
  2. Антикоагулянты прямого действия
  3. К теме 3. «Формы прямого волеизъявления граждан в системе местного самоуправления»
  4. К теме 4. «Формы прямого волеизъявления граждан в системе местного самоуправления»
  5. Контроллер прямого доступа к памяти
  6. Международная торговая политика представляет собой совокупность различных форм и методов международного регулирования обмена товарами и услугами между странами.
  7. Метод противоточного обмена теплотой
  8. МЕТОДЫ ИЗУЧЕНИЯ ОБМЕНА ВЕЩЕСТВ И ЭНЕРГИИ В ОРГАНИЗМЕ ЖИВОТНОГО, ОЦЕНКА ЭНЕРГЕТИЧЕСКОЙ ПИТАТЕЛЬНОСТИ КОРМОВ
  9. Может ли скорость обмена информацией превышать скорость света?
  10. Одновременное использование средств обмена устной и письменной информацией обычно эффективнее, чем только обмен письменной информацией.
  11. Операции, выполняемые с помощью указателей, часто называют операциями непрямого доступа, поскольку мы косвенно получаем доступ к переменной посредством некоторой другой переменной.
  12. Порядок обмена по системной магистрали ISA


Последнее изменение этой страницы: 2016-03-22; Просмотров: 2661; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь