Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 1

.docx
Скачиваний:
4
Добавлен:
17.03.2023
Размер:
517.95 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра информационной безопасности

отчет

по лабораторной работе №1

по дисциплине «Алгоритмы и Структуры Данных»

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

Студенты гр. 1363

Владимиров П.А.

Афанасьев Д.К.

Преподаватель

Беляев А. В.

Санкт-Петербург

2022

Цель работы: Ознакомление с алгоритмами сортировки линейных структур и оценкой эффективности данных алгоритмов.

Теоретические сведения

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

Сортировка выбором

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

Сортировка подсчетом

Рассмотрим более эффективный метод сортировки подсчетом. Пусть в сортируемом массиве размещены целые числа из небольшого (до 10.000) диапазона значений. Введем вспомогательный одномерный массив длины равной диапазону значений и инициализируем его нулями. Первым проходом сортируемого массива подсчитаем кол-во элементов с каждым конкретным значений (храня счетчики во вспомогательном массиве), вторым проходом по вспомогательному массиву слева направо восстановим исходный массив сразу в отсортированном виде.

Сортировка Quicksort

Сортировка Quicksort состоит в том, что мы выбираем из всего массива один элемент, назовём его опорным. Затем разбиваем элементы массива таким образом, что элементы, меньшие опорного, помещаются перед ним, а большие или равные – после. Рекурсивно применяем первые два шага к двум подмассивам слева и справа от опорного элемента. Рекурсия не применяется к массиву, в котором только один элемент или отсутствуют элементы.

Задание на лабораторную работу

Демонстрационные массивы

Провести сортировку массива (выданы по вариантам) тремя описанными методами.

Владимиров Пётр (5 вариант):

Выбором:

Подсчетом:

Quicksort:

Практическая часть

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

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void SelectionSort(int a[],int size) //сортировка выбором

{

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

for (int j = i + 1; j<size; j++){

if (a[i]>a[j]){

int temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}

}

void CountingSort(int unsort[],int sort[],int size) //сортировка подсчетом

{

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

{

for (int j = 0; j < size; j++)

{

if (unsort[i] == j) sort[j]+=1;

}

}

int i = 0;

int k = 0;

int x, j;

while (i != size)

{

x = sort[i]; // =2

for (j = 0; j < x; j++)

{

unsort[k] = i;

k+=1;

}

i+=1;

}

}

int main()

{

const int size=150000;

int a[size];

int b[size];

int i;

srand(time(NULL));

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

a[i]=rand()%10000; //заполнение массивы случайными числами размером size

}

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

b[i]=0; //обнуление вспомогательного массива

}

printf("First 10\n");

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

printf("%d ",a[i]);

} //вывод первых 10 элементов неотсортированного массива

printf("\n");

printf("Last 10\n");

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

printf("%d ",a[size-i-1]); //вывод последних 10 элементов неотсортированного массива

}

clock_t start;

start = clock(); //начало времени отсчета сортировки

//SelectionSort(a,size);

CountingSort(a,b,size);

start=clock()-start; //конец времени отсчета сортировки

printf("\n");

printf("First 10\n");

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

printf("%d ",a[i]); //вывод первых 10 элементов отсортированного массива

}

printf("\n");

printf("Last 10\n");

for (int i = 10; i>0;i--){

printf("%d ",a[size-i]); //вывод последних 10 элементов отсортированного массива

}

printf("\n");

printf("Time of sort: ");

printf("%f",(double)start/CLOCKS_PER_SEC); //вывод времени сортировки массива

return 0;

}

Работа программы

Рисунок 1 – Сортировка выбором

Рисунок 2 – Сортировка подсчетом

Сравнение времени

Выбором

Время

Кол-во

1

2

3

20000

1,468

1,504

1,488

40000

4,989

3,35

3,339

60000

6,657

6,568

6,652

120000

20,939

21,201

21,156

Подсчетом

Время

Кол-во

1

2

3

25000

1,167

1,161

1,165

50000

4,714

4,734

4,711

75000

10,817

10,818

10,819

150000

43,825

43,791

43,753

Соседние файлы в предмете Алгоритмы и структуры данных