Uploaded by tehno44

Основы программирования

advertisement
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Сибирский государственный автомобильно-дорожный университет
(СибАДИ)»
Факультет
Информационные системы в управлении
Кафедра
Автоматизированные системы и цифровые технологии
Направление
Информатика и вычислительная техника
Профиль
Автоматизированные системы обработки информации и
управления
КУРСОВАЯ РАБОТА
по дисциплине «Основы программирования»
Тема работы: « Алгоритмы решения практических задач на С++».
ЗАДАНИЕ
на курсовую работу
по дисциплине «Основы программирования»
1 Тема: « Алгоритмы решения практических задач на С++».
(подпись преподавателя)
Реферат
Тема курсовой работы: « Алгоритмы решения практических задач на
С++».
Цель работы: Освоение навыков работы со структурами, массивами
структур и файлами на языке программирования С++. Изучение методов
сортировки и поиска в массивах.
Перед началом выполнения работы были поставлены следующие задачи:
1. Изучить метод сортировки Хоара (быстрая сортировка).
2. Освоить навыки работы со структурами и массивами структур на языке
программирования С++.
3. Выполнить практическое задание.
 Дан одномерный динамический массив А неупорядоченных целых чисел.
Вывести на экран минимального положительное число из чисел с четным
номером или сообщение «Нет», если такого числа нет.
 Создать динамические массивы, используя указатели. Дан двумерный
массив a, размером (nm). Заполнить одномерный массив, найдя
количество отрицательных элементов в каждом столбце матрицы.
 Создать динамические массивы, используя указатели. Дан двумерный
массив a, размером (nn). Упорядочить по возрастанию главную
диагональ.
Содержание
1.
Введение
5
2
2.
Глава 1. Основы алгоритмов сортировки
7
3.
Глава 2. Метод сортировки Хоара (быстрая сортировка)
14
4.
Практическое задание
17
5.
Заключение
22
6.
Список литературных источников
24
7.
Приложение 1.
25
8.
Приложение 2.
29
Введение
3
В последние годы программирование для вычислительных машин стало не
только средством, владение которым оказывается решающим для успешной
работы во многих прикладных областях, а так же и предметом научного
изучения. Стало ясно, что решение о структурировании данных нельзя
принимать без знания алгоритмов. Так же с каждым годом жизнь становится
все быстрее и быстрее, ускоряется и увеличивается поток информации. Для
хранения всевозможной информации применяются так называемые базы
данных. Но и с этими базами, особенно если они содержат миллионы
пунктов, работать достаточно сложно, можно даже сказать невозможно.
Разобраться в таком количестве данных без сортировки практически не
возможно, они позволяют относительно быстро и качественно выделить
необходимую информацию из предварительно упорядоченного набора.
Следовательно, методы сортировки очень важны, особенно при обработке
данных. В программировании уделяется огромное внимание сортировкам и
их алгоритмам.
В настоящее время существует огромное множество алгоритмов сортировки,
которые имеют различный характер и скорость обработки информации.
Однако многие из них обладают очень серьезным недостатком, а именно,
время их выполнения пропорционально квадрату числа элементов. Для
больших объемов данных эти сортировки будут медленными, а, начиная с
некоторой величины, они будут слишком медленными, чтобы их можно было
использовать на практике.
В данной курсовой работе будет рассматриваться одна из лучших
сортировок. Которая носит название быстрая сортировка, алгоритм которой
признан наилучшим.
Цель
курсовой работы: Освоение навыков работы со структурами,
массивами структур и файлами на языке программирования С++. Изучение
методов сортировки и поиска в массивах.
Задачи курсовой работы:
4
 изучить теоретическую основу алгоритмов сортировки;
 рассмотреть алгоритм быстрой сортировки Хоара;
 реализовать его на языке программирования;

получить практические навыки разработки программ на языке С++ с
использованием динамических одномерных и двумерных массивов.
5
Глава 1. Основы алгоритмов сортировки.
Сортировка является одной из фундаментальных алгоритмических задач
программирования. Решению проблем, связанных с сортировкой, посвящено
множество научных исследований, разработано множество алгоритмов.
Сортировку следует понимать как процесс перегруппировки заданного
множества объектов в определенном порядке. Сортировка применяется во
всех без исключения областях программирования, будь то базы данных или
математические программы. [10]
Под алгоритмом сортировки подразумевают алгоритм упорядочивания
множества элементов по возрастанию или убыванию.
В случае наличия элементов с одинаковыми значениями, в упорядоченной
последовательности они располагаются рядом друг за другом в любом
порядке. Однако иногда бывает полезно сохранять первоначальный порядок
элементов с одинаковыми значениями.
В алгоритмах сортировки лишь часть данных используется в качестве ключа
сортировки. Ключом сортировки называется атрибут (или несколько
атрибутов), по значению которого определяется порядок элементов. Таким
образом, при написании алгоритмов сортировок массивов следует учесть, что
ключ полностью или частично совпадает с данными.
Практически каждый алгоритм сортировки можно разбить на 3 части:
 сравнение, определяющее упорядоченность пары элементов;
 перестановку, меняющую местами пару элементов;
 собственно сортирующий алгоритм, который осуществляет сравнение
и перестановку элементов до тех пор, пока все элементы множества не
будут упорядочены.
Алгоритмы сортировки имеют большое практическое применение. Их можно
встретить там, где речь идет об обработке и хранении больших объемов
6
информации. Некоторые задачи обработки данных решаются проще, если
данные заранее упорядочить.
3.1. Оценка алгоритмов сортировки.
Ни одна другая проблема не породила такого количества разнообразнейших
решений, как задача сортировки. Универсального, наилучшего алгоритма
сортировки на данный момент не существует. Однако, имея
приблизительные характеристики входных данных, можно подобрать метод,
работающий оптимальным образом. Для этого необходимо знать параметры,
по которым будет производиться оценка алгоритмов. [2]
 Время сортировки – основной параметр, характеризующий
быстродействие алгоритма.
 Память – один из параметров, который характеризуется тем, что ряд
алгоритмов сортировки требуют выделения дополнительной памяти под
временное хранение данных. При оценке используемой памяти не будет
учитываться место, которое занимает исходный массив данных и
независящие от входной последовательности затраты, например, на
хранение кода программы.
 Устойчивость – это параметр, который отвечает за то, что сортировка не
меняет взаимного расположения равных элементов.
 Естественность поведения – параметр, которой указывает на
эффективность метода при обработке уже отсортированных, или частично
отсортированных данных. Алгоритм ведет себя естественно, если
учитывает эту характеристику входной последовательности и работает
лучше.
3.2. Классификация алгоритмов сортировок
Все разнообразие и многообразие алгоритмов сортировок можно
классифицировать по различным признакам, например, по устойчивости, по
поведению, по использованию операций сравнения, по потребности в
дополнительной памяти, по потребности в знаниях о структуре данных,
выходящих за рамки операции сравнения, и другие.
7
Наиболее подробно рассмотрим классификацию алгоритмов сортировки по
сфере применения. В данном случае основные типы упорядочивания делятся
следующим образом.
 Внутренняя сортировка – это алгоритм сортировки, который в процессе
упорядочивания данных использует только оперативную память (ОЗУ)
компьютера. То есть оперативной памяти достаточно для помещения в нее
сортируемого массива данных с произвольным доступом к любой ячейке
и собственно для выполнения алгоритма. Внутренняя сортировка
применяется во всех случаях, за исключением однопроходного
считывания данных и однопроходной записи отсортированных данных. В
зависимости от конкретного алгоритма и его реализации данные могут
сортироваться в той же области памяти, либо использовать
дополнительную оперативную память. [6]
 Внешняя сортировка – это алгоритм сортировки, который при проведении
упорядочивания данных использует внешнюю память, как правило,
жесткие диски. Внешняя сортировка разработана для обработки больших
списков данных, которые не помещаются в оперативную память.
Обращение к различным носителям накладывает некоторые
дополнительные ограничения на данный алгоритм: доступ к носителю
осуществляется последовательным образом, то есть в каждый момент
времени можно считать или записать только элемент, следующий за
текущим; объем данных не позволяет им разместиться в ОЗУ.
Внутренняя сортировка является базовой для любого алгоритма внешней
сортировки – отдельные части массива
данных конечмусортируются заключенив информацеоперативной воздейстуюпамяти разделнии воздейстис товарпомощью спроаспециального разделниалгор
итма степнисцепляются продвиженв активнуюодин распедлниммассив, осбентиупорядоченный связаныпо ключу. [4]
Следует элемнтовотметить, разделничто распедлнимвнутренняя управленисортировка зависмотзначительно связаныеэффективней связаныевне
шней, осбентитак внешйкак представляюна широкгобращение распедлнимк торгвоперативной товарпамяти элемнтызатрачивается элемнтынамного элемнтовме
ньше предоставлнивремени, элемнтовчем ситемк носителям. [1]
8
Существуют поставкдесятки толькалгоритмов деятльносисортировки, широкгкаждый первойиз воздейстуюкоторых конечыйхорош конечыйв
широкгчём-то
своём. такжеНа предоставлниодних уходящиелегко этомобъяснять представляюпринципы процессортировки, увязатьдругие управленихороши распедлнимпри ситемы
работе распедлнимс широкгбольшими воздейстимассивами, зависмоттретьи информацеоптимизированы изысканепо элемнтскорости, удобствмчетвёрт
ые товар— разделнипо воздейстичислу конечмупроцессорных поставкциклов, этомкомпактности элемнтыкода связаныи т. д. [5]
3.3. Алгоритмы произвдтельустойчивой эконмичесаясортировки:
 Сортировка разделнипузырьком поставквоздейстидля закупочнйкаждой торгвпары распедлнииндексов товарпроизводится торгвыхобмен, отнсяесли развиющейсяэлементы комерчсаярасположен
ы закупочнйне услгпо отличеьнымпорядку воздейсти(алгоритмическая розничйсложность
O(n2)). осбентиВнутренний ситемыцикл элемнтснова торгвыхи представляюснова отличеьнымпробегает разделнипо толькмассиву услги развиющейсясравнивает болете
кущий факторвэлемент внешйс услгпредыдущим такжеи отнсяесли широкгтекущий увязатьменьше, закупочнйпереставляет комерчсаяего установлеис эконмичесаяпр
едыдущим; [13]
 Сортировка спроавставками продвижен–
информацеэлементы процесвходной конечыйпоследовательности отнсяпросматриваются элемнтпо предиятодному, внутрейи элемнткажд
ый представлноновый отнсяпоступивший изысканеэлемент распедлниразмещается изысканев предоставлниподходящее конечмуместо установлеисреди первойране
е первойупорядоченных местаэлементов разделни(алгоритмическая уходящиесложность толькO(n) разделни–
управленилучшая, целомO(n2) обеспчивающ– внутрейхудшая изысканеи целомсредняя);
 Сортировка предиятслиянием меропиятй–
обеспчивающразделение отличеьнымсписка местаэлементов установлеина отличеьнымдве представляюполовины широкгпримерно зависмотодинакового этапомразме
ра, элемнтысортировка сопрвждаютякаждой разделничасти распедлниотдельно, удобствмсоединение толькупорядоченных представляюмассива элемнтовп
оловинного предоставлниразмера разделнив связаныеодин закупочнй–
закупочнй(алгоритмическая ситемсложность продвиженвсегда этапомO(n прибылlog2 продвиженn));
3.4. Алгоритмы поставкнеустойчивой целомсортировки:
 Сортировка спроавыбором элемнтов–
элемнтпоиск обеспчивающнаименьшего факторви зависмотнаибольшего предиятэлемента распедлнии элемнтпомещение продвиженего закупочнйв распедлнимначало широкгили воздейстуюк
онец активнуюупорядоченного обеспчивающсписка воздейстую(алгоритмическая распедлнимсложность ситемывсегда конечыйO(n2));
 Сортировка меропиятйрасческой управлени(сложность зависмоталгоритма заключенихудшая товар- услгO(n2), уходящиелучшая целом–
этапомО(n меропиятйlog2 увязатьn)) воздейстую– эконмичесаяулучшение этомсортировки
пузырьком. розничйОсновная ситемидея разделни«расчёски» факторвв отличеьнымтом, розничйчтобы установлеипервоначально связаныебрать закупочнйдос
таточно явлсьбольшое связанырасстояние товармежду предоставлнисравниваемыми этапомэлементами изысканеи предоставлнипо заключенимере товаруп
9
орядочивания спроамассива распедлнисужать прибылэто закупочнйрасстояние услгвплоть закупочнйдо
минимального. информацеПервоначальный отличеьнымразрыв распедлнимежду спроасравниваемыми элемнтыэлементами конечмул
учше предиятбрать процесс этомучётом деятльносиспециальной продвиженвеличины, спроаназываемой розничйфактором такжеуменьше
ния, первойоптимальное спроазначение степникоторой сопрвждаютяравно сопрвждаютяпримерно
1,247. зависмотСначала распедлнимрасстояние этоммежду продвиженэлементами широкгравно толькразмеру ситеммассива, зависмотразделё
нного воздейстина прибылфактор предиятуменьшения розничй(результат прибылокругляется услгдо представлноближайшего
целого). такжеЗатем, явлсьпройдя внутреймассив информацес сопрвждаютяэтим элемнтовшагом, ситемынеобходимо заключениподелить толькшаг осбентина разделнифа
ктор разделниуменьшения управлении продвиженпройти предиятпо активнуюсписку
вновь. факторвТак удобствмпродолжается разделнидо товартех связаныпор, информацепока факторвразность сопрвждаютяиндексов элемнтовне поставкдостигнет
единицы. воздейстуюВ отнсяэтом внутрейслучае ситемымассив распедлнидосортировывается внешйобычным пузырьком.
 Сортировка информацеШелла явлсь–
первойулучшение ситемсортировки разделнивставками, болесравнение товарэлементов, развиющейсястоящих прибылне осбентитолько информаце
рядом, предоставлнино конечыйи управленина такжеопределённом такжерасстоянии прибылдруг разделниот удобствмдруга, элемнтначальный зависмотшаг управлениd разделни= закупочнйn представляю/
меропиятй2 отличеьным(лучший факторвслучай отнсяO(n∙log2n), воздейстуюхудший деятльносислучай
O(n2)). торгвых[12]При разделнисортировке спроаШелла сопрвждаютясначала продвиженсравниваются внутрейи представлносортируются поставкмеж
ду увязатьсобой управленизначения, конечмустоящие информацеодин эконмичесаяот такжедругого осбентина торгврасстоянии
d. распедлниПосле представляюэтого ситемыпроцедура ситемыповторяется зависмотдля торгвнекоторых зависмотменьших торгвзначений предиятd, развиющейсяа конечму
завершается конечыйсортировка осбентиШелла толькупорядочиванием уходящиеэлементов информацепри поставкd=1 информаце(то прибылесть целом
обычной распедлнимсортировкой
вставками). информацеЭффективность меропиятйсортировки сопрвждаютяШелла внешйв информацеопределенных болеслучаях зависмотобес
печивается широкгтем, ситемычто ситемэлементы продвижен«быстрее» заключенивстают разделнина торгвыхсвои места.
 Быстрая такжесортировка произвдтель–
этомвыбор болеопорного представлноэлемента элемнтв местамассиве, этапоми уходящиеего информацесравнение воздейстуюс внутрейостальными этапомэлемента
ми внешйв услгопределенном толькпорядке, обеспчивающравные представляюи
боинформациельшие предиятэлементы изысканепомещаются этомсправа, связаныменьшие элемнтов–
толькслева, этомзатем уходящиерекурсивное торгвыхприменение факторввышеописанного торгвых(алгоритмическая деятльносисл
ожность увязатьв этапомлучшем предияти развиющейсясреднем эконмичесаяслучае O(n∙lognкомерчская), представляюхудший развиющейсяслучай O(n2)).
Метод эконмичесаябыстрой осбентисортировки управленибыл факторвразработан деятльносив этапом1960 изысканегоду Ч.Ф.Р. факторвХоаром
(C.A.R.Hoareуправлени) широкги информацеон толькже первойдал представлноему отличеьнымэто
название. толькВ уходящиенастоящее внутрейвремя отличеьнымэтот представлнометод воздейстуюсортировки разделнисчитается
10
наилучшим. деятльносиОн деятльносиоснован воздейстуюна отличеьнымиспользовании воздейстуюобменного связаныеметода
сортировки. распедлнимЭто элемнттем распедлниболее факторвудивительно, элемнтесли распедлнимучесть произвдтельочень целомнизкое информацебыстродей
ствие торгвсортировки факторвпузырьковым торгвыхметодом, уходящиекоторый этомпредставляет элемнтысобой этапомпросте
йшую связаныеверсию предиятобменной сортировки.
Когда связаныев воздейстую1960 удобствмгоду воздейстиТони изысканеХоар зависмотпридумывал деятльносиэтот распедлнималгоритм, представляюему комерчсаянужно толькбыло удобствмот
сортировать удобствмданные широкгна связаныемагнитной отнсяленте широкгза предоставлниодин отнсяпроход, удобствмчтобы удобствмне элемнтперематыв
ать прибылплёнку распедлнимного раз. зависмотДля комерчсаяэтого распедлнимон розничйвзял деятльносиза распедлнимоснову заключениклассическую разделнипузырькову
ю такжесортировку факторви разделнипреобразовал разделниеё удобствмтак:
На предияточередном торгвыхшаге уходящиевыбирается активнуюопорный внутрейэлемент товар—
процесим элемнтыможет воздейстибыть факторвлюбой обеспчивающэлемент массива.
Все воздейстиостальные ситемэлементы осбентимассива связанысравниваются степнис спроаопорным степнии меропиятйте, элемнтовкоторые этапоммен
ьше розничйнего, распедлниставятся продвиженслева факторвот воздейстинего, конечмуа деятльносикоторые элемнтбольше представлноили воздейстуюравны распедлни— справа.
Для этомдвух розничйполучившихся элемнтыблоков увязатьмассива широкг(меньше толькопорного, воздейстуюи информацебольше заключенил
ибо такжеравны опорномуотличеьным) продвиженпроизводится развиющейсяточно разделнитакая меропиятйже зависмотоперация конечму—
уходящиевыделяется установлеиопорный распедлнимэлемент элемнти представляювсё комерчсаяидёт отнсяточно розничйтак информацеже, сопрвждаютяпока обеспчивающв факторвблоке закупочнйне процесостане
тся комерчсаяодин элемент. Наглядно это показано на рисунке 1.
11
Рис.1 закупочнйПример внешйсортировки ситемыХоара
Так сопрвждаютякак широкгна увязатьтретьем элемнтышаге информацемы увязатьразбиваем уходящиемассив целомна меропиятйдва болеи предиятдля распедлнимкаждой этапомчасти этомдела
ем торгвто распедлнимже местасамое, явлсьи зависмоттак связаныеснова предияти сопрвждаютяснова, конечмуто товарэто воздейстуюзначит, услгчто отнсяв этапомнём конечыйиспользуется
рекурсия. зависмотРекурсия отличеьным—
произвдтельэто целомкогда разделнифункция произвдтельвызывает отличеьнымсаму воздейстуюсебя, целоми предиятпри изысканеэтом розничйей отличеьнымнужно воздейстуюдержать распедлнимв управленипамят
и воздейстуювсе отличеьнымпредыдущие
этапы. факторвЭто прибылзначит, элемнтчто элемнтовпри закупочнйиспользовании элемнтсразу воздейстидвух поставкрекурсий активную(для такжелевой воздейстии целомп
равой предоставлничастей произвдтельмассива), целомможет спроапотребоваться заключениочень толькмного памяти. элемнтов[7]
Чтобы степниобойти произвдтельэто распедлниограничение, прибылиспользуют процесулучшенные предиятверсии ситемыбыстрой элемнтысор
тировки активную.
Но, произвдтельнесмотря розничйна отличеьнымтакой информацевозможный изысканерасход разделнипамяти, услгу изысканебыстрой произвдтельсортировки ситемыесть
болемного активнуюплюсов:
 это товародин товариз сопрвждаютясамых элемнтыбыстрых установлеиалгоритмов, факторвкогда представляюмы установлеизаранее первойничего явлсьне произвдтельзн
аем розничйпро разделнимассивы, этапомс воздейстикоторыми осбентипридётся продвиженработать;
 алгоритм закупочнйнастолько целомпрост, уходящиечто явлсьего отнсялегко предиятнаписать элемнтына розничйлюбом представляюязыке факторвпрог
раммирования;
 быструю воздейстуюсортировку услглегко продвиженраспараллелить предияти ситемразбить местана отличеьнымотдельные продвиженпро
цессы;
 алгоритм установлеиработает внутрейна связаныданных такжес заключенипоследовательным розничйдоступом, установлеикогда ситеммы ситемы
не распедлнимможем увязатьв широкглюбой болемомент связанывернуться целомв закупочнйначало, информацеа товардолжны представлноработать обеспчивающс явлсьдан
ными обеспчивающтолько произвдтельв распедлнимодном порядке.
3.5. Выбор местаопорного комерчсаяэлемента
Правильный комерчсаявыбор эконмичесаяопорного толькэлемента торгвыхможет уходящиесильно услгповысить конечмуэффективност
ь деятльносибыстрой
сортировки. осбентиВ изысканезависимости целомот торгвреализации распедлниалгоритма первойесть элемнтовразные факторвспособы деятльносивы
бора:
 Первый воздейстиэлемент конечый—
розничйв меропиятйпервых продвиженверсиях распедлнимбыстрой эконмичесаясортировки информацеХоар ситемывыбирал розничйопорным связаныпервый внутрейэл
емент
12
массива. изысканеИменно факторвтак предиятон услгсмог прибылобрабатывать тольквсю установлеимагнитную болеленту внутрейза конечмуодин
проход.
 Средний удобствмэлемент факторв— болетот, установлеикоторый спроафизически торгвстоит спроапосередине массива.
 Медианный связаныэлемент произвдтель—
заключениэлемент, конечмузначение этапомкоторого произвдтельнаходится элемнтыпосередине процесмежду информацевсеми уходящиезначения
ми степнив комерчсаямассиве
Есть разделниещё меропиятймного активнуюдругих болетехник предоставлнивыбора тольк—
эконмичесаяони конечыйприменяются, внешйкогда деятльносипрограммист предоставлниточно уходящиезнает, услгс управленикакими предиятмассивами прибылприд
ётся толькработать: обеспчивающнемного прибылупорядоченными этапомили конечыйкогда этомвсё вразнобой. [9]
Однако внешйследует степнииметь представляюв предиятвиду процесодно местанеприятное спроасвойство информацебыстрой
сортировки. предиятЕсли болевыбираемое увязатьдля обеспчивающразбиения ситемзначение активнуюоказывается установлеисовпадаю
щим отличеьнымс болемаксимальным торгвыхзначением, заключенито связаныебыстрая предоставлнисортировка торгвыхпревращается поставкв изысканесаму
ю спроамедленную связаныесо внутрейвременем произвдтельвыполнения n. связаныеОднако местана конечыйпрактике представляюэтот разделнислучай спроане
встречается.
Глава 2. «поставкМетод элемнтысортировки поставкХоара продвижен(быстрая
сортировка)этапом»
2.1. Описание эконмичесаяалгоритма явлсь«быстрой установлеисортировки»
Алгоритм распедлнибыстрой увязатьсортировки прибылвыполняется широкгследующим образомэтапом:
1.Необходимо конечыйделать зависмотвыбор элементаприбыл, конечыйкоторый обеспчивающбудет отнсяиспользован местакак
опорный. товарИм широкгможет скомерчскаятать конечмукаждый связаныиз заключенинабора
элементов. управлениЭтот поставквыбор торгвыхне этапомвлияет внешйна развиющейсякорректную поставкработу
алгоритмастепни, отнсяно изысканеспособен конечмуповлиять произвдтельна увязатьего производительность.
2.Выполнить деятльносисравнение закупочнйвсех услгоставшихся сопрвждаютякомпонентов розничйс ситемопорным уходящиеи активнуюперерасп
ределить отнсяих зависмотв прибылсоставе товармассива такболе, товарчтобы сопрвждаютяобразовать распедлнимтри удобствмнабора изысканеэлементов
(отрезка)относя: факторвбольше опорноговнешй, толькравны удобствмопорному управлении представлноменьше представляюопорного
3.системыДля торгвэлементов эконмичесаягрупп элемнты«больше» конечмуи увязать«меньше» разделнитребуется управлениповторить изысканерекурсивн
13
о связаныету воздейстуюже розничйочерёдность сопрвждаютядействий явлсьпри отличеьнымусловии, управленичто внешйих сопрвждаютяразмер распедлнипревышает
единичный.
Но, произвдтелькак сопрвждаютяправило, внешймассив увязатьподразделяют предияттолько внутрейна закупочнйдве
составляющие. эконмичесаяК развиющейсяпримеру предият«меньше предоставлниопорного» болеи места«больше изысканеи этапомравны
опорному». зависмотЭто деятльносипозволяет предоставлниупростить эконмичесаяалгоритм спроаи конечмусделать конечыйего распедлнимболее
эффективным.
Т. воздейстиХоар процесизобрёл конечыйтакую разделниметодику отнсядля связаныемашинного меропиятйперевода
текстов. степниВ закупочнйто обеспчивающвремя воздейстивесь элемнтысловарный этомзапас товарсохранялся закупочнйна связаныемагнитной изысканеленте сопрвждаютяи ситемр
азработанный
Т. отнсяХоаром удобствмметод конечыйсортировки воздейстидавал отнсявозможность разделнивыполнить внешйперевод комерчсаятекста товарза
степниодин торгвпроход целоммагнитной
ленты. заключениОтпадала меропиятйнеобходимость деятльносиперематывать этапомленту осбентина
начало. изысканеИдея распедлниэтого услгалгоритма первойпришла обеспчивающв товарголову конечыйк
Т. торгвыхХоару, информацекогда конечмуон этомпроживал представляюв элемнтыСССР удобствми торгвыхпроходил внешйтам связаныобучение эконмичесаяпо увязатьспециализ
ации уходящие«компьютерный перевод». представляюОн эконмичесаяразрабатывал англо-болерусский отличеьнымразговорный
словарь.
2.2. Выбор распедлниопорного активнуюэлемента
В представлноначале элемнтовиспользования товаралгоритма широкгбыстрой торгвсортировки факторвв прибылкачестве ситемопорного услг
служил осбентипервый элемент. внутрейЭто воздейстуюмогло активнуюсущественно отнсяснижать закупочнйэффективность
сортировки. отличеьнымЛучшие внутрейрезультаты удобствмдаёт
вторгвыхыбор широкгмедианного, этомто факторвесть распедлнисреднего первойэлемента, первойчто заключениявляется целомоптимальным
вариантом. местаНо разделнинахождение разделнитакого элемнтовэлемента торгвтребует товарзначительных услгвычислит
ельных ресурсов. предоставлниБолее меропиятйпростой
способ деятльносиопределения степниопорного деятльносиэлемента предоставлнипредложил
Ломутозаключени, конечмуи отличеьнымон факторвбыл товарописан уходящиев деятльносипопулярных
изданиях. увязатьВ торгвкачестве местаопорного ситемберётся удобствмпоследний зависмотэлемент, представляюа распедлнив представляюалгоритме предиятсо
храняется распедлниминдекс ситемв этомспециальной
переменной. информацеВ деятльносислучае отличеьнымнахождения поставкэлемента, первойкоторый предиятменьше комерчсаяили этапомравен эконмичесаяопо
рному управленивыполняется элемнтыувеличение зависмотиндекса сопрвждаютяи распедлнимданный факторвэлемент сопрвждаютяставится меропиятйвпереди
опорного. [3]
14
Данная сопрвждаютяметодика осбентиразбиения удобствмменее развиющейсягромоздка, удобствмчем осбентиу Т. первойХоара, элемнтовно связаныи представляюне услгтакая
эффективная. установлеиЕсли зависмотмассив распедлниуже воздейстуюпрошёл зависмотсортировку информацеили внешйимеет элемнтравные элемнтыпо распедлнимвел
ичине первойкомпоненты, спроато заключенибыстрая факторвсортировка элемнтстановится отличеьнымменее
сложной. разделниЕсть закупочнйразные розничйметоды, розничйкоторые широкгпозволяют оинформациептимизировать эконмичесаяэту
сортировку.
2.3. Разбиение первойХоара
Эта такжеметодика отнсяприменяет болеиндекс болев предиятначале удобствммассива удобствми закупочнйещё воздейстуюодин товарв представляюего
конце. внешйИндексы распедлнидвижутся
впредпиято установлеивстречном торгвнаправлении осбентидо элемнтовтех отнсяпор, ситемыпока спроане ситемыобнаружатся факторвдва этомэлемента установлеиоди
н управленииз внешйкоторых уходящиебольше элемнтопорного спроаи конечмурасполагается ситемыперед торгвыхним, эконмичесаяа развиющейсявторой толькменьше широкго
порного элемнтови изысканерасполагается распедлнимза
ним. целомНайденные этомэлементы удобствмследует меропиятйпоменять широкгместами развиющейсяи ситемтакие комерчсаяобмены торгввыполн
яются информацедо широкгмомента этомпересечения
индексов. ситемЗатем товарсогласно распедлнималгоритму воздейстуювозвращается произвдтельпоследний индекс.
Эта конечмуметодика Т. связаныеХоара торгвимеет элемнтовбольшую конечыйэффективность, прибылчем разделнисхема
Ломутоуправлени, осбентипоскольку ситемысреднее широкгколичество зависмотобменных установлеиопераций поставкпримерно увязатьв увязатьтри торгв
раза степнименьше уходящиеи сопрвждаютяона деятльносиэффективнее поставкдаже комерчсаяпри уходящиеравенстве заключенивсех
элементов. торгвыхНо увязатьследует конечыйзаметить, болечто внутрейданная предоставлниметодика представляюсортировки
нестабильна.
2.4. Сложность факторвалгоритма
Обобщённая связаныесложность услгалгоритма элемнтовзависит торгвыхтолько предоставлниот торгвчисла деятльносиделений конечмуто этоместь отличеьнымо
т ситемыглубины поставкрекурсивных
операций. распедлнимГлубина конечыйэтих уходящиеопераций этапомимеет широкгзависимость меропиятйот услгсостава элемнтывходных факторвдан
ных представлнои широкгметодики услгопределения процесопорного
элемента. спроаПри осбентисамом удобствмблагоприятном меропиятйварианте осбентипри развиющейсявсех уходящиеоперациях этапомделения ситем
массив комерчсаяподразделяется элемнтына управленидве эконмичесаяпрактически развиющейсяодинаковые составляющие. [8]
В активнуюслучае закупочнйудачного конечмуразделения распедлнимобъёмы разделнивыделяемых прибылчастей конечыймассива активнуюмогут информацесос
тавлять воздейстуюне процесменее комерчсаядвадцати произвдтельпяти эконмичесаяпроцентов целоми конечмуне элемнтовболее заключенисемидесяти осбентипяти товарот продвиженис
ходного
объёма. отнсяТак этапомкак товаркаждая услгвыделенная удобствмчасть предоставлнимассива элемнтытоже внешйимеет широкгслучайное информацерасп
15
оложение этапомто торгвыхэти эконмичесаяположения элемнтыможно товарприменить информацек поставккаждому отнсяпериоду воздейстисортировк
и продвижени осбентикаждому связаныначальному изысканекомпоненту
массива. услгВ отличеьнымсамом предиятхудшем воздейстислучае тольккаждое этомделение болевыдаёт степнидве ситемычасти увязатьмассива процеср
азмеры, такжекоторых комерчсаябудут разделни1 торгви толькn внутрей–
обеспчивающ1, этапомчто осбентиозначает, элемнтчто разделнипри продвиженкаждой распедлнимочередной этапомрекурсии информацемассив внешйбольшего связаныразме
ра услгстанет меропиятйна обеспчивающединицу изысканеменьше толькчем услгв эконмичесаяпрошлый
раз. разделниЭто представляювозможно отличеьнымесли меропиятйопорным внутрейэлементом целомна развиющейсявсех поставкэтапах этомокажется продвиженсамый обеспчивающ
маленький распедлниэлемент степниили ситемсамый связаныбольшой активнуюиз информацевсего отнсянабора отнсяэлементов
подлежащих обработке.
При целомсамом установлеипростом деятльносиопределении распедлнимопорного элемнтыэлемента прибылкогда факторввыбирается представлноили разделнип
ервый отнсяили элемнтыпоследний предиятэлемент ситемв конечмумассиве первойподобный торгвыхэффект внешйможет элемнтдать представляюмасс
ив прибылкоторый изысканеуже произвдтельотсортирован зависмотв товарпрямом сопрвждаютяили предоставлнив этомобратном направлении.
Нконечыйо меропиятйчисло деятльносивыполняемых уходящиеобменных представляюопераций розничйи связанывзаимосвязанное спроас розничйними конечмуобщее
такжевремя деятльносиработы произвдтельне ситемысчитается элемнтысамым процесбольшим недостатком. закупочнй[6]
Плохо отличеьнымв изысканеданном воздейстислучае представлното осбентичто обеспчивающглубина закупочнйрекурсивных представлнопроцедур элемнтпри услгреализаци
и изысканеалгоритма прибылможет толькдостичь представляювеличины эконмичесаяn ситема продвиженэто спроаозначает информацечто прибыладрес процесвозврата розничйа услг
также болелокальные розничйпеременные торгвыхучаствующие распедлнимв предоставлнипроцедуре установлеиподразделения элемнтовмасс
ива управленидолжны конечмубыть этомсохранены этапомn раз. представлноЕсли развиющейсязначение осбентипеременной связаныn элемнтовдостаточно
великоэтапом, элемнтовто произвдтельв развиющейсяхудшем торгвыхслучае продвиженвозможно меропиятйпереполнение уходящиепамяти управленистека удобствмпри развиющейсявыпо
лнении болепрограммы алгоритма.
16
Практическое удобствмзадание
Задание
 Дан степниодномерный торгвыхдинамический предоставлнимассив внутрейА уходящиенеупорядоченных распедлницелых
чисел. толькВывести удобствмна розничйэкран этапомминимального болеположительное элемнтычисло продвижениз торгвыхчисел активную
с прибылчетным отнсяномером уходящиеили товарсообщение конечму«Нет», развиющейсяесли болетакого воздейстуючисла нет.
 Создать
указатели.
связаныединамические
торгвДан
связаныедвумерный
отнсямассивы,
поставкмассив
эконмичесаяиспользуя
элемнтa,
установлеиразмером
(nm). представляюЗаполнить элемнтоводномерный отличеьныммассив, сопрвждаютянайдя закупочнйколичество меропиятйотрицательны
х торгвыхэлементов прибылв местакаждом изысканестолбце матрицы.
 Создать
указатели.
разделнидинамические
услгДан
деятльносидвумерный
торгвмассивы,
управленимассив
процесиспользуя
предоставлниa,
информацеразмером
(nn). информацеУпорядочить обеспчивающпо связанывозрастанию связаныеглавную диагональ.
Реализация степнизадачи отличеьнымна процесязыке Сразделни++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
setlocale(LC_ALL, "rus");
int n,e; // размер массива
cout << "выберите программу ";
cin >> e;
if (e == 1) {
cout << "Введите размер массива: ";
cin >>n;
int* mas = new int[n]; // динамический массив
// заполнение массива (для примера от -20 до 20)
for (int i = 0; i < n; i++) {
for (i = 0; i < n; i++) {
mas[i] = (-40 + rand() % 81) * 0.5;
17
cout << mas[i] << " ";
}
}
int minPositive = INT_MAX; // минимальное
положительное число
bool found = false; // флаг, указывающий, было
ли найдено положительное число
// поиск минимального положительного числа
среди элементов с четными индексами
for (int i = 0; i < n; i += 2) {
if (mas[i] > 0 && mas[i] < minPositive) {
minPositive = mas[i];
found = true;
}
}
if (e == 2) {
cout << "а)" << endl;
int m;
cout << "Введите количество строк n: ";
cin >> n;
cout << "Введите количество столбцов m: ";
cin >> m;
// выделяем память для двумерного массива a
int** a = new int* [n];
for (int i = 0; i < n; i++) {
a[i] = new int[m];
}
// заполняем двумерный массив a
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rand() % 21 - 10; //
заполняем случайными числами от -10 до 10
cout << a[i][j] << "\t"; // выводим
элементы матрицы на экран
}
cout << endl;
}
// Выделение памяти для одномерного массива b
int* b = new int[m];
18
// Заполнение одномерного массива b
for (int j = 0; j < m; j++) {
int count = 0;
for (int i = 0; i < n; i++) {
if (a[i][j] < 0) {
count++;
}
}
b[j] = count;
}
// Вывод одномерного массива b
cout << "Количество отрицательных элементов в
каждом столбце:\n";
for (int j = 0; j < m; j++) {
cout << b[j] << " ";
}
cout << endl;
// Освобождение памяти
for (int i = 0; i < n; i++) {
delete[] a[i];
}
delete[] a;
delete[] b;
}
if (e == 3) {
cout << "б)" << endl;
n = 4;//размерность массива
int** с = new int* [n]; // создаем массив
указателей на int
for (int i = 0; i < n; i++) {
с[i] = new int[n]; // создаем массив int
размером n
for (int j = 0; j < n; j++) {
с[i][j] = rand() % 21 - 10; //
заполняем случайными числами от -10 до 10
cout << с[i][j] << "\t"; // выводим
элементы матрицы на экран
}
cout << endl;
}
19
// сортировка по возрастанию главной диагонали
for (int i = 0; i < n; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (с[j][j] < с[minIndex][minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(с[i][i], с[minIndex][minIndex]);
}
}
cout << "Матрица после сортировки:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << с[i][j] << "\t";
}
cout << endl;
}
// освобождаем память
for (int i = 0; i < n; i++) {
delete[] с[i];
}
delete[] с;
}
return 0;
}
20
Результаты товарработы толькпрограммы
Рисунок 2. зависмотКонсольное предоставлниприложение
Инструкция для пользователя.
1. Когда откроется программа нужно выбрать программу, которую вы
ходите выбрать, если первая то - 1,если вторая то - 2, а если третья то 3.
2. В случае выбора первой программы нужно ввести размер массива и
программа выведет минимальное положительное число с четным
индексом
3. В случае выбора второй программы нужно ввести количество строк и
столбцов и она выведет Количество отрицательных элементов в
каждом столбце
21
4. В случае выбора третей программы будет дан двумерный массив,
который будет упорядочен по возрастанию главной диагонали.
Заключение
В результате выполнения данной курсовой работы были успешно
выполнены следующие задачи, поставленные на первоначальном этапе:
 Изучена теоретическая область по основам навыков работы со
структурами,
массивами
структур
и
файлами
на
языке
программирования С++. Изучены методы сортировки и поиска в
массивах. По результатам ознакомления с литературными и
интернет – источниками написана 1 глава.
 Рассмотрен и исследован алгоритм быстрой сортировки Хоара.
 Разработано консольное приложение на языке С++
Для конечмусоздания деятльносипрограммы отнсябыла зависмотвыбрана связанысреда услгVisual
Studio. закупочнйПрограмма распедлниразрабатывалась изысканедля воздейстуюработы увязатьв ситемконсольном толькрежим
е прибыли ситемнаписана комерчсаяна поставкязыке С++.
Выявленные дразделниостоинства представляюбыстрой сортировкипроизвдтель:
22
 Один разделнииз поставксамых конечыйбыстродействующих удобствм(на распедлнимпрактике) уходящиеиз комерчсаяалгоритмов разделнивнутрен
ней торгвсортировки установлеиобщего назначения.
 Алгоритм этомочень спроакороткий: комерчсаязапомнив продвиженосновные распедлниммоменты, осбентиего розничйлегко прибылнаписа
ть заключени«из головы»управлени, внешйневелика обеспчивающконстанта поставкпри торгвыхn элемнтlog заключениn .
 С модизависмотфикациями спроатребует воздейстилишь местаO (предпиятlog nвоздействи) связаныедополнительной этомпамяти широкгв услгвиде
стека.
 Хорошо отнсясочетается поставкс спроамеханизмами поставккэширования элемнтови розничйвиртуальной памяти.
 Допускает увязатьестественное прибылраспараллеливание торгвых(сортировка управленивыделенных ситемпод
массивов элемнтыв этомпараллельно первойвыполняющихся подпроцессах).
 Допускает развиющейсяэффективную воздейстуюмодификацию целомдля внешйсортировки ситемыпо товарнескольким услгкл
ючам предият(в деятльносичастности увязать—
управлениалгоритм ситемСеджвика связаныедля ситемсортировки произвдтельстрок): спроаблагодаря процестому, осбентичто зависмотв удобствмпроцесс
е закупочнйразделения такжеавтоматически первойвыделяется удобствмотрезок болеэлементов, изысканеравных толькопорн
ому, ситемыэтот отнсяотрезок внутрейможно зависмотсразу обеспчивающже внутрейсортировать торгвпо деятльносиследующему ключу.
 Работает болена увязатьсвязных спроасписках связаныи распедлнидругих осбентиструктурах местас информацепоследовательным увязатьдос
тупом, зависмотдопускающих информацеэффективный управленипроход отличеьнымкак закупочнйот закупочнйначала степник целомконцу, распедлнимтак конечмуи управлениот увязать
конца деятльносик началу.
Выявленные нпроизвдтельедостатки этомбыстрой сортировкиинформацие:
 Сильно внутрейдеградирует спроапо распедлнискорости розничй(до факторвO (разделниn
2розничй)) сопрвждаютяв товархудшем ситемыили разделниблизком местак факторвнему продвиженслучае, закупочнйчто болеможет элемнтслучиться этомпри эконмичесаянеудач
ных поставквходных данных.
 Прямая эконмичесаяреализация продвиженв представлновиде разделнифункции распедлнис отличеьнымдвумя закупочнйрекурсивными элемнтвызовами увязатьмож
ет комерчсаяпривести ситемк предоставлниошибке конечыйпереполнения конечыйстека, распедлнитак меропиятйкак распедлнимв первойхудшем отличеьнымслучае торгвей разделнимо
жет продвиженпотребоваться внешйсделать предоставлниO (nотличеьным) первойвложенных предоставлнирекурсивных вызовов.
 Неустойчив.
Как воздейстуюследует деятльносииз развиющейсясамого воздейстуюназвания, установлеибыстрая широкгсортировка заключени—
конечыйэто закупочнйалгоритм, воздейстикоторый первойсортирует конечыйсписок прибылбыстрее, толькчем элемнтовлюбые продвижендругие эконмичесаяалгорит
мы
23
сортировки. широкгКак спроаи конечыйсортировка ситемслиянием, удобствмбыстрая предиятсортировка спроатакже ситемыиспользу
ет ситемстратегию степни«разделяй процеси властвуй».
Быстрая внешйсортировка конечыйработает конечмубыстрее элемнтови распедлниэффективнее факторвдля степнисортировки толькструкту
р данных. распедлниБыстрая распедлнисортировка отнся—
воздейстуюэто отнсяпопулярный зависмоталгоритм развиющейсясортировки, активнуюкоторый воздейстуюиногда отнсядаже удобствмпредпочтительн
ее разделниалгоритма связанысортировки слиянием.
Список литературы.
Список литературы.
1.
Адитья Бхаргава «Грокаем алгоритмы». Иллюстрированное пособие
для программистов и любопытствующих. «Питер», 2021 год.
2.
Эффективные алгоритмы: учеб. Пособие /О.Н. Долинина, В.В.
Печенкин, Б.Л. Файфель К.Д. Кузнецова. – Саратов: Амирит, 2020
3.
Глухова Л.А. Основы алгоритмизации и программирования: Лаб.
практикум для студ. спец. I-40 01 01 «Программное обеспечение
информационных технологий» дневной формы обуч. В 4 ч. Ч.2 / Л.А.
Глухова, Е.П. Фадеева, Е.Е. Фадеева. – Мн.: БГУИР, 2005
4.
Кнут Д. "Искусство программирования. Том 3. Сортировка и поиск".
Диалектика/Вильямс 2019
24
5.
Круз Р. Л. «Структуры данных и проектирование программ».
2017,
Москва
6.
Липачѐв Е.К. Технология программирования. Методы сортировки
данных: учебное пособие / Е.К. Липачѐв. – Казань: Казан. ун-т, 2017
7.
Мельников, Б. Ф. Алгоритмы сортировки массивов. Сложность
алгоритмов : учебное пособие / Б. Ф. Мельников, Е. А. Мельникова. –
Самара: Изд-во «Самарский университет», 2014 – 40 с.
8.
Стивенс Род. «Алгоритмы. Теория и практическое применение». М.,
2016
9.
https://efim360.ru/javascript-poisk-v-massive/ Дата обращения: 7.05.2023
10. https://is20-2019.susu.ru/blog/metodicheskie-ukazaniya-prakticheskoy-rabotyimetodyi-sortirovki-po-kursu-programmirovaniya/ Учебно-методический журнал
группы ЭУ-320. Бизнес-информатика 2019 Дата обращения 03.05.2023
11. Эффективные алгоритмы: учеб. Пособие /О.Н. Долинина, В.В. Печенкин,
Б.Л. Файфель К.Д. Кузнецова. – Саратов: Амирит, 2020
12. Незнанов А. А. Программирование и алгоритмизация /А.А. Незнанов, –
М.: Академия, 2010 – 304 с.
13. Давыдов В.Г. Программирование и основы алгоритмизации /В.Г.
Давыдов, – М.: Высшая школа, 2005 – 447 с
Приложение 1.
Текст прразделниограммы
Реализация информацезадачи удобствмна установлеиязыке Сэлемнт++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
setlocale(LC_ALL, "rus");
int n,e; // размер массива
cout << "выберите программу ";
cin >> e;
if (e == 1) {
25
cout << "Введите размер массива: ";
cin >>n;
int* mas = new int[n]; // динамический массив
// заполнение массива (для примера от -20 до 20)
for (int i = 0; i < n; i++) {
for (i = 0; i < n; i++) {
mas[i] = (-40 + rand() % 81) * 0.5;
cout << mas[i] << " ";
}
}
int minPositive = INT_MAX; // минимальное
положительное число
bool found = false; // флаг, указывающий, было
ли найдено положительное число
// поиск минимального положительного числа
среди элементов с четными индексами
for (int i = 0; i < n; i += 2) {
if (mas[i] > 0 && mas[i] < minPositive) {
minPositive = mas[i];
found = true;
cin >> n;
cout << "Введите количество столбцов m: ";
cin >> m;
// выделяем память для двумерного массива a
int** a = new int* [n];
for (int i = 0; i < n; i++) {
a[i] = new int[m];
}
// заполняем двумерный массив a
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rand() % 21 - 10; //
заполняем случайными числами от -10 до 10
cout << a[i][j] << "\t"; // выводим
элементы матрицы на экран
}
cout << endl;
}
26
// Выделение памяти для одномерного массива b
int* b = new int[m];
// Заполнение одномерного массива b
for (int j = 0; j < m; j++) {
int count = 0;
for (int i = 0; i < n; i++) {
if (a[i][j] < 0) {
count++;
}
}
b[j] = count;
}
// Вывод одномерного массива b
cout << "Количество отрицательных элементов в
каждом столбце:\n";
for (int j = 0; j < m; j++) {
cout << b[j] << " ";
}
cout << endl;
// Освобождение памяти
for (int i = 0; i < n; i++) {
delete[] a[i];
}
delete[] a;
delete[] b;
}
if (e == 3) {
cout << "б)" << endl;
n = 4;//размерность массива
int** с = new int* [n]; // создаем массив
указателей на int
for (int i = 0; i < n; i++) {
с[i] = new int[n]; // создаем массив int
размером n
for (int j = 0; j < n; j++) {
с[i][j] = rand() % 21 - 10; //
заполняем случайными числами от -10 до 10
cout << с[i][j] << "\t"; // выводим
элементы матрицы на экран
}
cout << endl;
27
}
// сортировка по возрастанию главной диагонали
for (int i = 0; i < n; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (с[j][j] < с[minIndex][minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(с[i][i], с[minIndex][minIndex]);
}
}
cout << "Матрица после сортировки:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << с[i][j] << "\t";
}
cout << endl;
}
// освобождаем память
for (int i = 0; i < n; i++) {
delete[] с[i];
}
delete[] с;
}
return 0;
}
28
Приложение 2
Результат работы программы
Скриншот экрана 1
29
Скриншот экрана 2
Скриншот экрана 3
30
Download