Виды сортировок: список, массив, вектор

Сортировка как процесс перестановки объектов данного множества в определенном порядке с целью облегчить поиск элементов во множестве. Составление подпрограммы сортировок, анализ среднего времени каждой сортировки, формирование графического меню.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 10.03.2013
Размер файла 78,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

СОДЕРЖАНИЕ

Введение

1. Теоретическая часть

1.1 Сортировка списком

1.2 Сортировка массивами

1.3 Сортировка вектором

2. Технологическая часть

2.1 Блок-схема реализуемого алгоритма

2.2 Описание собственных функций

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

Заключение

Список использованной литературы

ВВЕДЕНИЕ

В данной курсовой работе рассмотрены некоторые виды сортировок: список, массив, вектор.

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

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

Допустим, что у нас есть массив анкет о сотрудниках организации и нам надо найти их распределение возрастов (сколько человек имеют 30, 50, 60 лет). Эту задачу легко решить, если отсортировать анкеты по возрасту сотрудников, и затем пройтись по массиву, подсчитывая количество сотрудников с каждым возрастом.

Под сортировкой обычно понимают процесс перестановки объектов данного множества в определенном порядке. Цель сортировки - облегчить последующий поиск элементов в отсортированном множестве.

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

Сортировки обычно разделяют на две категории: сортировка массивов и сортировка последовательных файлов. Их часто называют внутренней и внешней сортировкой, так, как массивы располагаются во внутренней памяти ЭВМ, а файлы хранятся в более медленной, но более вместительной «внешней» памяти, т.е. на запоминающих устройствах с механическим передвижением (дисках, лентах).

Цель: исследовать некоторые методы сортировок.

Задачи: изучить литературу по алгоритмам сортировок, составить подпрограммы сортировок, провести анализ и вычислить среднее время каждой сортировки, составить графическое меню.

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 Сортировка списком

Сортировка простыми обменами, сортировка списком - простой алгоритм сортировки. Для понимания и реализации этот алгоритм - простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: O (nІ).

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

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

Анализ сортировки. При анализе всякой сортировки определяется число операций сравнения и обмена, выполняемых в лучшем, среднем и худшем случаях. Для сортировки пузырьковым методом число сравнений остается неизменным, поскольку два цикла всегда выполняются заданное число раз вне зависимости от упорядоченности исходного массива. Это означает, что при сортировке пузырьковым методом всегда выполняется 1 / 2 (n2-n) операций сравнения, где «n» задает число сортируемых элементов массива. Эта формула выводится на том основании, что внешний цикл сортировки пузырьковым методом выполняется n-1 раз, а внутренний цикл выполняется n / 2 раз.

1.2 Сортировка массивами

Сортировка массивами - простой алгоритм сортировки. Хотя этот алгоритм сортировки уступает в эффективности более сложным (таким как быстрая сортировка), у него есть ряд преимуществ:

1. эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;

2. эффективен на наборах данных, которые уже частично отсортированы;

- это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);

3. может сортировать список по мере его получения;

- использует O (1) временной памяти, включая стек.

Минусом же является высокая сложность алгоритма

Описание. На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. Приведенный ниже алгоритм использует именно эту стратегию выбора.

Анализ алгоритма. Время выполнения алгоритма зависит от входных данных: чем большее множество нужно отсортировать, тем большее время выполняется сортировка. Также на время выполнения влияет исходная упорядоченность массива. Так, лучшим случаем является отсортированный массив, а худшим - массив, отсортированный в порядке, обратном нужному.

1.3 Сортировка вектором

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

Алгоритм

Шаги алгоритма:

- находим минимальное значение в текущем списке

- производим обмен этого значения со значением на первой неотсортированной позиции

- теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы

Анализ сортировки. К сожалению как и в сортировке пузырьковым методом внешний цикл выполняется n-1 раз, а внутренний цикл выполняется n / 2 раз. Это значит, что число сравнений для сортировки выбором равно 1 / 2 (n2-n) и эта сортировка будет выполняться слишком медленно для большого числа элементов. Число операций обмена в наилучшем случае равно 3 (n-1), а в худшем случае равно n2 / 4 + 3 (n - 1). В лучшем случае (когда исходный массив уже упорядочен) потребуется поменять местами только n-1 элементов, а каждая операция обмена требует три операции пересылки.

2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

2.1 Блок-схема реализуемого алгоритма

В курсовой работе использовались следующие стандартные заголовочные файлы:

«iostream.h» - заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C + +. Он включён в стандартную библиотеку C + + . Название образовано от Input / Output Stream («поток ввода-вывода»). В языке C + + и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio.h в Cи. iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно. Являясь частью стандартной библиотеки C + + , эти объекты также являются частью стандартного пространства имён - std.

«stdlib.h» - заголовочный файл стандартной библиотеки языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с C + + и известен в нём как cstdlib. Название «stdlib» расшифровывается как «standard library» (стандартная библиотека).

«stdio.h» (от англ. standard input / output header - стандартный заголовочный файл ввода / вывода) заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода / вывода» («portable I / O package»), написанного Майком Леском из Bell Labs в начале 1970-х. C + + ради совместимости, также использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.

«conio.h» (от англ. console input-output - консольный ввод-вывод) - заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS.Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы

«string.h» - заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы с нуль-терминированными строками и различными функциями работы с памятью. Функции объявленные в string.h широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями, такими как ISO-8859-1; многобайтовые кодировки такие как UTF-8 будут работать, с отличием, что «длина» строки будет определяться как число байтов, а не число символов Юникода, которым они соответствуют

«graphics.h» - стандартная библиотека С + + подключающая графический режим.

Стандартные типы данных:

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

- int целочисленный знаковый тип данных, диапозон от -32768…32767. Размер 1 байт

- long int целочисленный знаковый тип данных,диапозон от 2147483648…2147468647.Размер 4 байта.

- char символьный тип данных, предназначенный для хранения одного символа в определённой кодировке. Если char определён как signed (знаковый), то его диапазон значений составляет от ?127 до 127 (на единицу больше в положительную или отрицательную сторону, в зависимости от реализации). Если он определён как unsigned (беззнаковый), то его значения могут составлять от 0 до 255. Значение, содержащееся в этом типе, можно всегда безопасно привести к значению типа int. В Си нет примитивных типов для работы со строками, поэтому для работы с ними используется указатель char * .

- double вещественный тип данных с плавающей точкой и двойной точностью.Диапозон 1,7е-308…1,7е + 308.Размер 8 байт.

struct time t;

gettime (&t);

printf («Еру current time is: %2d:%02d:%02d:%02d\n», t.ti_hour, t.ti_min, t.ti_sec , t.ti_hund, )

Данная структура выводит время в которое была вызвана данная функция.

t.ti_hour - поле структуры выводящее часы.

t.ti_min - поле структуры выводящее минуты.

t.ti_sec - поле структуры выводящее секунды.

t.ti_hund - поле структуры выводящее миллисекунды.

2.2 Описание собственных функций

«SORTI.CPP» - модуль, в котором находятся подпрограммы 3-х сортировок, подпрограммы выводящие время начала сортировки и время конца сортировки и общее время сортировки, подпрограмма генерирование массива (случайным образом, по убыванию и по возрастанию)

«FILI.CPP» - модуль, в котором находятся подпрограммы записи данных на внешнюю память.

void puzir (int * & kop,int razmer) - даннай функций сортирует переданный массив методом пузырька.

Пример работы алгоритма:

Возьмём массив с числами «5 1 4 2 8» и отсортируем значения по возрастанию, используя сортировку пузырьком. Выделены те элементы, которые сравниваются на данном этапе.

Первый проход:

(5 1 4 2 8) (1 5 4 2 8), Здесь алгоритм сравнивает два первых элемента и меняет их местами.

(1 5 4 2 8) (1 4 5 2 8), Меняет местами, так как 5 > 4

(1 4 5 2 8) (1 4 2 5 8), Меняет местами, так как 5 > 2

(1 4 2 5 8) (1 4 2 5 8), Теперь, ввиду того, что элементы стоят на своих местах

(8 > 5), алгоритм не меняет их местами.

Второй проход:

(1 4 2 5 8) (1 4 2 5 8)

(1 4 2 5 8) (1 2 4 5 8), Меняет местами, так как 4 > 2

(1 2 4 5 8) (1 2 4 5 8)

(1 2 4 5 8) (1 2 4 5 8)

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

Третий проход:

(1 2 4 5 8) (1 2 4 5 8)

(1 2 4 5 8) (1 2 4 5 8)

(1 2 4 5 8) (1 2 4 5 8)

(1 2 4 5 8) (1 2 4 5 8)Теперь массив отсортирован и алгоритм может быть завершён.

void protalkivanie (int * & kop,int razmer) - функция сортирующая массив методом выбора.

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

Будем строить готовую последовательность, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от нулевого и заканчивая (n-1)-м.

На i-м шаге выбираем наименьший из элементов a [i] ... a [n] и меняем его местами с a [i]. Последовательность шагов при n=5 изображена на рисунке ниже.

Вне зависимости от номера текущего шага i, последовательность a [0]...a [i] (выделена курсивом) является упорядоченной. Таким образом, на (n-1)-м шаге вся последовательность, кроме a [n] оказывается отсортированной, а a [n] стоит на последнем месте по праву: все меньшие элементы уже ушли влево.

void vstavka (int * & kop,int razmer) - функция сортирующая массив методом вставки.

Сортировка простыми вставками в чем-то похожа на вышеизложенные методы.

Аналогичным образом делаются проходы по части массива, и аналогичным же образом в его начале «вырастает» отсортированная последовательность.

Однако в сортировке можно было четко заявить, что на i-м шаге элементы a [0]...a [i] стоят на правильных местах и никуда более не переместятся. Здесь же подобное утверждение будет более слабым: последовательность a [0]...a [i] упорядочена. При этом по ходу алгоритма в нее будут вставляться (см. название метода) все новые элементы.

Будем разбирать алгоритм, рассматривая его действия на i-м шаге. Как говорилось выше, последовательность к этому моменту разделена на две части: готовую a [0]...a [i] и неупорядоченную a [i + 1]...a [n].

На следующем, (i + 1)-м каждом шаге алгоритма берем a [i + 1] и вставляем на нужное место в готовую часть массива.

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

В зависимости от результата сравнения элемент либо остается на текущем месте (вставка завершена), либо они меняются местами и процесс повторяется.

Таким образом, в процессе вставки мы «просеиваем» элемент x к началу массива, останавливаясь в случае, когда

- найден элемент, меньший x или

- достигнуто начало последовательности.

void midalina9 (kop,razmer,iter) - функция сортирующая массив.

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

В этой части алгоритма мы перемещаем в конец массива максимальный элемент, затем исключаем его из дальнейшего процесса сортировки. Поскольку максимальный элемент всегда находится на вершине пирамиды, мы должны поменять местами элементы a [0] и a [n-1] (т.е. последний элемент). Причем элемент a [n-1] необходимо добавлять так, чтобы не нарушился порядок пирамиды (при этом пирамиду придется частично перестроить). Далее мы будем рассматривать массив только до (n-2)-го элемента.

На следующем шаге мы меняем местами a [0] и a [n-2] и далее рассматриваем массив только до (n-3)-го элемента. Повторяем всю эту процедуру до тех пор, пока в рассматриваемой части массива не останется один элемент.

int Zadaniemassiva (int midx, int midy, int& metod, long int& razmer, int& p) - функция в которой задаётся размер массива,метод заполнения массива (рандомом, по возрастанию и по убыванию).Максимально вводимое число массива 24500 элементов. Пока не будет задан массив в программе будет активно только 2 кнопки «Задание массива» и «Exit».

int F1 (int midx, int midy) { - функция прорисовывающая название кнопок.

moveto ((midx-7 * 14),midy-30);

outtext («Zadanie parametrov masiva»);

moveto ((midx-7 * 3), midy);

outtext («Puzirek»);

moveto ((midx-7 * 3),midy + 30);

outtext («Vstavki»);

moveto ((midx-7 * 7),midy + 60);

outtext («Protalkivani9»);

moveto ((midx-7 * 7),midy + 90);

outtext («Piramidalina9»);

moveto ((midx-7 * 2),midy + 120);

outtext («Exit»);

return 0;

}

int F (int midx,int midy,int h,int p) { - функция прорисовывающая кнопки меню.

int y=midy;

for (int i=-30;i<=120;i + =30) {

if (p==0) { / / если переменная р=0 то это значит что массив ещё не задан и активнми будут только кнопки «Задание массива» и «Exit».

setfillstyle (1,7);

bar (midx-100, y-10 + i, midx + 100,y + 10 + i);

}

if ((p==1) || (-1== (i / 30)) || ((i / 30)==4)) { / / p=1 массив задан все кнопки меню активны.

setfillstyle (1,2);

bar (midx-100, y-10 + i, midx + 100,y + 10 + i);

}

if (h== (i / 30)) { / / данное условие определяет какая кнопка сейчас активна.

setfillstyle (1,3);

bar (midx-100, y-10 + i, midx + 100, (y + 10) + i);

}

}

return F1 (midx,midy);

}

int File (int * & kop,int k,int razmer) { - данная функция записывает отсортированный массив в файл с расширением .txt по убыванию или по возрастанию в зависимости от того,что выбрал пользователь.

FILE * out;

if ((out = fopen («c:\\BORLANDC\\BIN\\1.txt», «w»)) == NULL) {

fprintf (stderr, «Cannot open output file.\n»);

return 1; }

if (k==1) {

for (int i=0; i<razmer; i + + ) {

fprintf (out, «%d «, kop [i] );

}

}

if (k==0) {

for (int i=razmer-1; i>=0; i--) {

fprintf (out, «%d «, kop [i] );

}

}

fclose (out);

return 0;

}

ЗАКЛЮЧЕНИЕ

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

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

Метод сортировки

Среднее время (сек)

Кол. итераций

тип заполнения массива

Список

1,37

150305841

Рандом

0

0

По возрастанию

2,58

300000000

По убыванию

Массив

0,75

205291

Рандом

0,33

0

По возрастанию

1,26

150062500

По убыванию

Вектором

3,95

150000000

Рандом

1,81

0

По возрастанию

3,74

300000000

По убыванию

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Гультяев А. Визуальное моделирование в среде MATHLAB: учебный курс. - СПб: Питер. 2009. - 432 стр. с ил.

2. Дьяконов В. МАTLAB: учебный курс. - СПб: Питер, 2009. - 560 стр. с ил.

3. Дьяконов В., Круrлов В. [По тексту] Математические пакеты расширения МАТLAB. - Специальный справочник. - СПб: Питер, 2009. - 480 стр.

4. Дюбуа Д., Прад А. Теория возможностей. Приложение к представлению знаний в информатике. - М.: Радио и связь, 1990. - 288 стр.

5. Иванов О.В. Статистика / Учебный курс для социологов и менеджеров. Часть 1. Описательная статистика. Теоретико-вероятностные основания статистического вывода. - М. 2005. 187 стр.

6. Hebb D. 1961. Organization of behavior. New York: Science Edition.

7. Rumelhart D.E., Hinton G.E., Williams R.J. 1986. [По тексту] Learning internal reprentations by error propagation. In Parallel distributed processing, vol. 1, pp. 318-62. Cambridge, MA: MIT Press.

8. Werbos P.J. 1974. [По тексту] Beyond regression: New tools for prediction and analysis in the behavioral sciences. Masters thesis, Harward University.

9. Wasserman P.D. 1988a. [По тексту]Combined backpropagation / Cauchy machine. Proceedings of the International Newral Network Society. New York: Pergamon Press.

10. Rumelhart D.E., Hinton G.E., Williams R.J. 1986. Learning internal reprentations by error propagation. In Parallel distributed processing, vol. 1, pp. 318-62. Cambridge, MA: MIT Press.

11. Wasserman P.D. 1988b. [По тексту]Experiments in translating Chinese characters using backpropagation. Proceedings of the Thirty-Third IEEE Computer Society International Conference. Washington, D.C.: Computer Society Press of the IEEE.

12. Parker D.B. 1987. Second order back propagation: Implementing an optimal 0 (n) approximation to Newton's method as an artificial newral network. Manuscript submitted for publication.

13. Stornetta W.S., Huberman B.A. 1987. [По тексту]An improwed three-layer, backpropagation algorithm. In Proceedings of the IEEE First International Conference on Newral Networks, eds. M. Caudill and C. Butler. San Diego, CA: SOS Printing.

14. Русскоязычный форум по C++.

15. Программирование на языке высокого уровня СИ. Часть II: практикум / Сост. О.В. Шестопал, О.В. Сташкова. - Тирасполь, 2010. - 83 с.

ПРИЛОЖЕНИЕ

сортировка множество программа

Листинг программы

Файл МENU.CPP

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include «SORTI.CPP»

#include «FILE.CPP»

int Zadaniemassiva (int midx,int midy,int& metod,long int& razmer,int& p) {

int i=0;

setfillstyle (0,1);

bar (0,0,midx * 2,midy / 2 + 40);

outtextxy (midx / 25, midy / 5, «Vvedite razmer massiva: «);

outtextxy (midx / 25, midy / 5-20, «Massiv ne bolee 24500 elementov!»);

char symbol [6],m [2]={' ','\0'};

while ((i<5) && ((symbol [i]!=13) || (i==0))) {

symbol [i]=getch ();

if ((symbol [0]!='0') && (symbol [i]>='0') && (symbol [i]<='9')) {

m [0]=symbol [i];

i + + ;

outtextxy (midx / 25 + 190 + i * 8, midy / 5, m);

}

else if ((symbol [i]==8) && (i!=0)){

setfillstyle (0,2);

bar (midx / 25 + 190 + i * 8,midy / 5 + 10,midx / 25 + 190 + i * 12 + 50,midy / 5-10);

i--;

}

}

symbol [i]='\0';

if (atol (symbol)>24500) return Zadaniemassiva (midx,midy,metod,razmer,p);

razmer=atoi (symbol);

setfillstyle (1,2);

bar (midx / 25 + 26 * 7,midy / 5 + 15,midx / 25 + 26 * 7 + 16 * 7,midy / 5 + 30);

outtextxy (midx / 25, midy / 5 + 20, «Tip zapolneni9 massiva: Random Po Vozrastaniu Po ubivaniju»);

int x;

metod=1;

while (x!=13) {

x=getch ();

if (x==77) {

setfillstyle (0,1);

bar (midx / 25 + 26 * 7,midy / 5 + 15,midx / 25 + 1000,midy / 5 + 30);

if (metod==3) metod=0;

metod + + ;

setfillstyle (1,2);

bar (midx / 25 + 26 * 7 + (metod-1) * 16 * 7,midy / 5 + 15,midx / 25 + 26 * 7 + metod * 16 * 7,midy / 5 + 30);

outtextxy (midx / 25, midy / 5 + 20, «Tip zapolneni9 massiva: Random Po Vozrastaniu Po ubivaniju»);

if (metod==3) metod=0;

}

if (x==75) {

setfillstyle (0,1);

bar (midx / 25 + 26 * 7,midy / 5 + 15,midx / 25 + 1000,midy / 5 + 30);

if (metod==0) metod=3;

metod--;

if (metod==0) metod=3;

setfillstyle (1,2);

bar (midx / 25 + 26 * 7 + (metod-1) * 16 * 7,midy / 5 + 15,midx / 25 + 26 * 7 + metod * 16 * 7,midy / 5 + 30);

outtextxy (midx / 25, midy / 5 + 20, «Tip zapolneni9 massiva: Random Po Vozrastaniu Po ubivaniju»);

}

}

p=1;

return 0;

}

int Podmenu (int midx,int midy,int h) {

moveto ((midx + 110),midy + h * 30);

outtext («Po Ubivaniju»);

moveto ((midx + 110),midy + h * 30 + 30);

outtext («Po Vozrastaniju»);

return 0;

}

int F1 (int midx,int midy) {

moveto ((midx-7 * 14),midy-30);

outtext («Zadanie parametrov masiva»);

moveto ((midx-7 * 3),midy);

outtext («Puzirek»);

moveto ((midx-7 * 3),midy + 30);

outtext («Vstavki»);

moveto ((midx-7 * 7),midy + 60);

outtext («Protalkivani9»);

moveto ((midx-7 * 7),midy + 90);

outtext («Piramidalina9»);

moveto ((midx-7 * 2),midy + 120);

outtext («Exit»);

return 0;

}

int F (int midx,int midy,int h,int p) {

int y=midy;

for (int i=-30;i<=120;i + =30) {

if (p==0) {

setfillstyle (1,7);

bar (midx-100, y-10 + i, midx + 100,y + 10 + i);

}

if ((p==1) || (-1== (i / 30)) || ((i / 30)==4)) {

setfillstyle (1,2);

bar (midx-100, y-10 + i, midx + 100,y + 10 + i);

}

if (h== (i / 30)) {

setfillstyle (1,3);

bar (midx-100, y-10 + i, midx + 100, (y + 10) + i);

}

}

return F1 (midx,midy);

}

int F2 (int midx,int midy,int h,int k) {

int poly [12];

for (int i=0;i<60;i + =30) {

setfillstyle (1,2);

poly [0]= midx + 100;

poly [1]= midy + h * 30 + i;

poly [2]=midx + 110;

poly [3]=midy + 10 + h * 30 + i;

poly [4]=midx + 230;

poly [5]=midy + 10 + h * 30 + i;

poly [6]=midx + 230;

poly [7]=midy-10 + h * 30 + i;

poly [8]=midx + 110;

poly [9]=midy-10 + h * 30 + i;

poly [10]=midx + 100;

poly [11]=midy + h * 30 + i;

drawpoly (6, poly);

floodfill (midx + 101,midy + h * 30 + i, 15);

if (k== (i / 30)) {

setfillstyle (1,3);

poly [0]= midx + 100;

poly [1]= midy + h * 30 + i;

poly [2]=midx + 110;

poly [3]=midy + 10 + h * 30 + i;

poly [4]=midx + 230;

poly [5]=midy + 10 + h * 30 + i;

poly [6]=midx + 230;

poly [7]=midy-10 + h * 30 + i;

poly [8]=midx + 110;

poly [9]=midy-10 + h * 30 + i;

poly [10]=midx + 100;

poly [11]=midy + h * 30 + i;

drawpoly (6, poly);

floodfill (midx + 101,midy + h * 30 + i, 15);

}

}

Podmenu (midx,midy,h);

return 0;

}

int main (void)

{

int gdriver = DETECT, gmode, errorcode;

int midx, midy, i;

initgraph (&gdriver, &gmode, ««);

midx = getmaxx () / 2;

midy = getmaxy () / 3;

int j=midy-30;

int h=-1,k=0,p=0;

unsigned long int iter=0;

char x;

char * s;

char * d;

int metod,r;

long int razmer;

double time1,s1;

while (x!=113) {

F (midx,midy,h,p);

x=getch ();

if (x==80) {

h + + ;

setfillstyle (0,2);

bar (0,midy / 2,midx / 2 + 60,midy * 2);

bar (0,midy / 2,midx * 2,midy / 2 + 40);

bar (midx / 25,midy + 170,midx,midy + 190);

}

if (x==72) {

h--;

setfillstyle (0,2);

bar (0,midy / 2,midx / 2 + 60,midy * 2);

bar (0,midy / 2,midx * 2,midy / 2 + 40);

bar (midx / 25,midy + 170,midx,midy + 190);

}

if (h==5) h=-1;

if (h==-2)h=4;

if (p==0) {

if (h==0) h=4;

if (h==3) h=-1;

}

F (midx, midy, h, p);

if ((x==13) && (h!=4) && (h!=-1)) { int k=0;

setfillstyle (0,2);

bar (0,midy / 2 + 20,midx / 2 + 60,midy * 2);

bar (0,midy / 2,midx * 2,midy / 2 + 40);

bar (midx / 25,midy + 170,midx,midy + 190);

while (x!=8) {

if (x==80) k + + ;

if (x==72) k--;

if (k==2) k=0;

if (k==-1) k=1;

F2 (midx,midy,h,k);

x=getch ();

if (x==13) {

int * kop=new int [razmer];

massiv (kop,razmer,metod);

moveto (midx / 25,midy / 2);

outtext («Massiv sgenerirovan»);

moveto (midx / 25,midy / 2 + 20);

outtext («i soxranen v»);

moveto (midx / 25,midy / 2 + 40);

outtext («C: / BORLANDC / BIN / 2.BAK»);

File1 (kop,razmer);

if (h==0){

na4alo (time1,r,s1);

puzir (kop,razmer,iter);

konec (time1,r,s1);

}

if (h==1) {

na4alo (time1,r,s1);

vstavka (kop,razmer,iter);

konec (time1,r,s1);

}

if (h==2) {

na4alo (time1,r,s1);

protalkivanie (kop,razmer,iter);

konec (time1,r,s1);

}

if (h==3) {

na4alo (time1,r,s1);

Pirmidalina9 (kop,razmer,iter);

konec (time1,r,s1);

}

File (kop,k,razmer);

x=8;

delete (kop);

moveto (midx / 25,midy);

outtext («Massiv otsortirovan»);

if (h==0) {

moveto (midx / 25,midy + 20);

outtext («metodom puzirika!»);

}

if (h==1) {

moveto (midx / 25,midy + 20);

outtext («Metodom vstavki!»);

}

if (h==2) {

moveto (midx / 25,midy + 20);

outtext («Metodom protalkivani9!»);

}

if (h==3) {

moveto (midx / 25,midy + 20);

outtext («Piramidalinoi sortirovkoi»);

}

moveto (midx / 25,midy + 40);

outtext («Massiv soxranen v»);

moveto (midx / 25,midy + 60);

outtext («C: / BORLANDC / BIN / 1.BAK»);

ultoa (iter,d,10);

outtextxy (midx / 25,midy + 180,»Kolli4estvo itteracii:»);

outtextxy (midx / 25 + 7 * 25,midy + 180,d);

}

}

setfillstyle (1,16);

bar (midx + 100,midy-90,midx + 300,midy + 200);

}

if ((x==13) && (h==4)) x=113;

if ((x==13) && (h==-1)) Zadaniemassiva (midx,midy,metod,razmer,p);

}

closegraph ();

return 0;

}

Файл SORTI.CPP

#include <dos.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int na4alo (double& time1,int& r,double& s1) {

char min [10];

char sec [10];

char chas [10];

char hund [10];

struct time t;

gettime (&t);

itoa (t.ti_hour,chas,10);

itoa (t.ti_min,min,10);

itoa (t.ti_sec,sec,10);

itoa (t.ti_hund,hund,10);

for (int i=0;min [i];i + + );

if (i==1) {

min [1]=min [0];

min [0]='0';

sec [2]='\0';

}

for (i=0;sec [i];i + + );

if (i==1) {

sec [1]=sec [0];

sec [0]='0';

sec [2]='\0';

}

for (i=0;hund [i];i + + );

if (i==1) {

hund [1]=hund [0];

hund [0]='0';

hund [2]='\0';

}

setfillstyle (1,0);

bar (300,390,300 + 40 * 7,450);

outtextxy (300,400,»Vremia na4ala sortirovki:»);

outtextxy (300 + 29 * 7,400,chas);

outtextxy (300 + 31 * 7,400,»:»);

outtextxy (300 + 32 * 7,400,min);

outtextxy (300 + 34 * 7,400,»:»);

outtextxy (300 + 35 * 7,400,sec);

outtextxy (300 + 37 * 7,400,».»);

outtextxy (300 + 38 * 7,400,hund);

s1=t.ti_hund;

time1=t.ti_min * 60 + t.ti_sec + (s1 / 100);

r=t.ti_hour;

return 0;

}

void konec (double time1,int r,int s1)

{

int r2;

char min [10];

char sec [10];

char chas [10];

char hund [10];

char time [10];

char timer [10];

struct time t2;

gettime (&t2);

itoa (t2.ti_hour,chas,10);

itoa (t2.ti_min,min,10);

itoa (t2.ti_sec,sec,10);

itoa (t2.ti_hund,hund,10);

for (int i=0;min [i];i + + );

if (i==1) {

min [1]=min [0];

min [0]='0';

sec [2]='\0';

}

for (i=0;sec [i];i + + );

if (i==1) {

sec [1]=sec [0];

sec [0]='0';

sec [2]='\0';

}

for (i=0;hund [i];i + + );

if (i==1) {

hund [1]=hund [0];

hund [0]='0';

hund [2]='\0';

}

setfillstyle (1,0);

bar (300 + 29 * 7,410,300 + 40 * 7,430);

outtextxy (300,420,»Vremia konca sortirovki:»);

outtextxy (300 + 29 * 7,420,chas);

outtextxy (300 + 31 * 7,420,»:»);

outtextxy (300 + 32 * 7,420,min);

outtextxy (300 + 34 * 7,420,»:»);

outtextxy (300 + 35 * 7,420,sec);

outtextxy (300 + 37 * 7,420,».»);

outtextxy (300 + 38 * 7,420,hund);

double s2=t2.ti_hund;

r2=t2.ti_hour;

r2=r2-r;

double time2=r2 * 3600 + t2.ti_min * 60 + t2.ti_sec + (s2 / 100);

time2=time2-time1;

itoa (time2,time,10);

if (s1>s2) s2=100 + s2-s1;

else s2=s2-s1;

itoa (s2,timer,10);

for (i=0;timer [i];i + + );

if (i==1) {

timer [1]=timer [0];

timer [0]='0';

timer [2]='\0';

}

outtextxy (300,440,»Vremia sortirovki:»);

outtextxy (300 + 21 * 7,440,time);

outtextxy (300 + 22 * 7,440,».»);

outtextxy (300 + 23 * 7,440,timer);

}

void puzir (int * & kop,int razmer,unsigned long int& iter) {

int temp,a;

iter=0;

for (int i=1;i<razmer;i + + ) { a=i;

while ((a) && (kop [a]<kop [a-1])) {

temp=kop [a-1];

kop [a-1]=kop [a];

kop [a]=temp;

a--;

iter + + ;

}

}

}

void vstavka (int * & kop,int razmer,unsigned long int& iter) {

int min,index,temp;

iter=0;

for (int k=0;k<razmer;k + + ){ min=kop [k]; index=k;

for (int i=k;i<razmer;i + + ) {

if (min>kop [i]) {

min=kop [i];

index=i;

iter + + ;

}

}

temp=kop [k];

kop [k]=kop [index];

kop [index]=temp;

}

}

void protalkivanie (int * & kop,int razmer,unsigned long int& iter) {

int temp;

iter=0;

for (int k=0;k<razmer-1;k + + ) {

for (int i=0;i<razmer-1;i + + ) {

if (kop [i]>kop [i + 1]) {

temp=kop [i];

kop [i]=kop [i + 1];

kop [i + 1]=temp;

iter + + ;

}

}

}

}

void Pirmidalina9 (int * & kop,int razmer,unsigned long int& iter) {

int temp,b,z,g;

iter=0;

for (long int i=razmer-1;i>=0;i--) {

kop [i]=random (razmer);

}

for (z=0;z<razmer;z + + ) { b=1; i=z;

while ((b) && (i>0)) { iter + + ;

if ((i%2==0) && (kop [i]>kop [i / 2-1])) {

temp=kop [i];

kop [i]=kop [i / 2-1];

kop [i / 2-1]=temp;

i=i / 2-1;

}

else if ((i%2==1) && (kop [i]>kop [i / 2])) {

temp=kop [i];

kop [i]=kop [i / 2];

kop [i / 2]=temp;

i=i / 2;

}

else b=0;

}

}

g=razmer;

while (g>0) {

temp=kop [0];

kop [0]=kop [g-1];

kop [g-1]=temp;

g--;

i=0; b=1;

while ((b) && (i * 2 + 1<g)) { iter + + ;

if ((kop [i]<kop [i * 2 + 1]) && (kop [i]>=kop [i * 2 + 2]) && (i * 2 + 1<g)) {

temp=kop [i];

kop [i]=kop [i * 2 + 1];

kop [i * 2 + 1]=temp;

i=i * 2 + 1;

}

else if ((kop [i]<kop [i * 2 + 2]) && (kop [i]>=kop [i * 2 + 1]) && (i * 2 + 2<g)){

temp=kop [i];

kop [i]=kop [i * 2 + 2];

kop [i * 2 + 2]=temp;

i=i * 2 + 2;

}

else if ((kop [i]<kop [i * 2 + 1]) && (kop [i]<kop [i * 2 + 2])) {

if ((kop [i * 2 + 1]<kop [i * 2 + 2]) && (i * 2 + 2<g)) {

temp=kop [i];

kop [i]=kop [i * 2 + 2];

kop [i * 2 + 2]=temp;

i=i * 2 + 2;

}

else {

temp=kop [i];

kop [i]=kop [i * 2 + 1];

kop [i * 2 + 1]=temp;

i=i * 2 + 1;

}

}

else b=0;

}

}

}

int massiv (int * & kop,int razmer,int metod) {

if (metod==1) {

for (int i=0;i<razmer;i + + )

kop [i]=random (razmer);

}

if (metod==2) {

for (int i=0;i<razmer;i + + )

kop [i]=i;

}

if (metod==3) {

for (int i=razmer-1;i>=0;i--)

kop [i]=razmer-i-1;

}

return 0;

}

Файл FILE.CPP

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

int File (int * & kop,int k,int razmer) {

FILE * out;

if ((out = fopen («c:\\BORLANDC\\BIN\\1.txt», «w»)) == NULL) {

fprintf (stderr, «Cannot open output file.\n»);

return 1; }

if (k==1) {

for (int i=0; i<razmer; i + + ) {

fprintf (out, «%d «, kop [i] );

}

}

if (k==0) {

for (int i=razmer-1; i>=0; i--) {

fprintf (out, «%d «, kop [i] );

}

}

fclose (out);

return 0;

}

int File1 (int * & kop,int razmer) {

FILE * out;

if ((out = fopen («c:\\BORLANDC\\BIN\\2.txt», «w»)) == NULL) {

fprintf (stderr, «Cannot open output file.\n»);

return 1; }

for (int i=0; i<razmer; i + + ) {

fprintf (out, «%d «, kop [i] );

}

fclose (out);

return 0;

}

Размещено на Allbest.ru

...

Подобные документы

  • Понятие "сортировка" как упорядочение элементов некоторой последовательности, ее цель и методы. Разработка алгоритмов, подпрограмм сортировок различного рода, анализ и вычисление среднего времени каждой сортировки, составление графического меню.

    курсовая работа [165,4 K], добавлен 24.06.2012

  • Реализация различных методов сортировки. Алгоритмические языки программирования. Обработка большого числа единообразно организованных данных. Алгоритмы сортировки массивов. Анализ проблем реализации и использования различных видов сортировок массивов.

    курсовая работа [640,3 K], добавлен 07.07.2011

  • Постановка задачи сортировки. Анализ основных понятий сортировок слияниями. Алгоритм сортировки простым и естественным слиянием. Оценка сложности алгоритма. Программная реализация простого слияния. Тестирование меню на корректность входных данных.

    курсовая работа [283,6 K], добавлен 22.06.2015

  • Сортировка как процесс перегруппировки заданного множества объектов в некотором определенном порядке, основные этапы данного процесса. Способы формирования начальных отрезков. Описание структуры программы. Результаты испытаний, их исследование и анализ.

    курсовая работа [111,6 K], добавлен 31.01.2014

  • Состав DЕLPHI проекта. Алгоритм сортировки вектора. Метод сортировки файла. Сценарий интерфейсного диалога пользователя с программой. Поиск и вычисление времени, затраченного на поиск и сортировку. Исходный текст модуля Project.dpr, MainForm.pas.

    курсовая работа [827,4 K], добавлен 07.11.2010

  • Сортировка как процесс расстановки элементов "в некотором порядке", ее структура и основные компоненты, характеристика методов. Порядок выбора того или иного метода сортировки: линейный с обменом и подсчетом, методом Шелла, с отложенными обменами.

    реферат [27,1 K], добавлен 13.09.2009

  • Алгоритмы и алфавит языка Турбо Паскаль. Основные типы данных. Операторы присваивания, перехода и выбора. Понятие массива в Паскале. Особенности работы со строками в программе. Использование линейного поиска и поиска с барьером. Основные виды сортировок.

    учебное пособие [53,2 K], добавлен 09.11.2009

  • Исследование основных особенностей алгоритмов быстрой и поразрядной сортировки данных. Построение графиков зависимости времени сортировки от количества элементов в файле и от степени перемешенности элементов. Описания сортировки чисел и строковых данных.

    лабораторная работа [1,2 M], добавлен 23.07.2012

  • Разработка программы, сортирующей массивы данных различного типа методом подсчета. Основные шаги алгоритма сортировки, ее свойства и модификация подсчетом. Целесообразность применения сортировки подсчетом. Условия эффективности алгоритма сортировки.

    лабораторная работа [438,5 K], добавлен 16.07.2015

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

    контрольная работа [32,8 K], добавлен 20.01.2012

  • Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.

    курсовая работа [23,1 K], добавлен 24.05.2015

  • Анализ основных алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Сортировка пузырьком, методами вставок, выбора, методом Шелла, быстрая сортировка. Операция разделения массива внутренней сортировки.

    курсовая работа [161,7 K], добавлен 17.12.2015

  • Линейные алгоритмы, условия и циклы. Массивы, строки, множества, подпрограммы и файлы. Определение позиций экстремальных элементов в массивах вещественных чисел. Осуществление циклических сдвигов элементов массива. Определение элементов матрицы.

    контрольная работа [719,6 K], добавлен 10.04.2015

  • Алгоритмы сортировки методами простых вставок и пузырька. Зависимость среднего времени сортировки от числа сортируемых элементов. Функции, осуществляющие сортировку любого количества элементов методом простых вставок, на основе сортировки таблицы адресов.

    курсовая работа [557,1 K], добавлен 26.05.2010

  • Краткое описание языка программирования С++. Алгоритм линейного выбора элемента, методов минимального (максимального) элемента и челночной сортировки. Анализ и разработка приложения, организующего сортировку массива данных пятью методами сортировки.

    реферат [614,8 K], добавлен 12.04.2014

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

    реферат [189,8 K], добавлен 06.12.2014

  • Изучение алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Отличительные черты сортировки включением, выбором, разделением, сортировки Шелла, обменной сортировки. Сравнение методов: плюсы и минусы.

    курсовая работа [203,8 K], добавлен 03.12.2010

  • Работа с одномерными и двухмерными массивами: составление функций нахождения заданных элементов, их количества и суммы под и над главной диагональю, поиск среднего арифметического. Составление блок-схемы, написание текста программы, его тестирование.

    контрольная работа [52,0 K], добавлен 27.12.2010

  • Понятие алгоритма и сортировки. Способы и алгоритмы сортировки массивов. Быстрая сортировка Хоара. Описание алгоритма "быстрой сортировки". Реализация на языке программирования. Анализ наихудшего разбиения. Вероятностные алгоритмы быстрой сортировки.

    курсовая работа [291,5 K], добавлен 22.03.2012

  • Разработка базы данных спортивной обуви NIKE. Работа основных модулей и блоков. Процесс упорядочения элементов по определенному критерию. Формы сортировки базы данных. Добавление данных в базу. Поиск значений по заданному пользователем критерию.

    курсовая работа [2,9 M], добавлен 16.08.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.