Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Харьков 2014

Читайте также:
  1. Белгородско-Харьковская наступательная операция (3-23 августа 1943г).
  2. ХАРЬКОВ - ХГАГХ - 2013
  3. Харьков 2009
  4. Харьковская академия непрерывного образования
  5. Харьковская академия непрерывного образования
  6. Харьковская академия непрерывного образования
  7. Харьковская академия непрерывного образования
  8. Харьковская академия непрерывного образования
  9. Харьковская академия непрерывного образования

 

1. Задание:

1. Разработать проект для исследования алгоритмов сортировки в соответствии с вариантом (сортировка простыми включениями (простой вставкой),шейкер-сортировка). Интервал: [0,200].

2. Разработать интерфейс проекта, позволяющий:

- задавать размерность и качество массива;

- осуществлять выбор алгоритма сортировки для исследования;

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

3. Создать подпрограмму для генерации целочисленного массива различного качества. В подпрограмме предусмотреть:

- задание размерности массива;

- задание диапазона чисел массива;

- создание массива с равномерно распределенными случайными числами;

- создание упорядоченного по возрастанию массива;

- создание упорядоченного по убыванию массива.

4. Создать подпрограмму, реализующую алгоритм сортировки в соответствии с вариантом. В подпрограмме предусмотреть:

- определение числа сравнений;

- определение числа обменов;

- определение суммы обменов и сравнений;

- сортировку массива по возрастанию.

 

2.Математическая постановка задачи:

Задача сортировки состоит в следующем: пусть дана последовательность из n элементов принадлежащих некоторому множеству а, на котором задано отношение всеобщего порядка “<=”. Найти перестановку этих элементов в таком порядке ak1,…akn, при котором будет справедливо отношение ak1<=ak2<=…akn.

3.Текст программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace Lab1_MSD

{

public partial class Form1: Form

{

List<int> array = new List<int>();

public Form1()

{

InitializeComponent();

cmbGenerate.SelectedIndex = 0;

cmbType.SelectedIndex = 0;

}

 

private void button1_Click(object sender, EventArgs e)

{

Random rnd = new Random();

int count = (int)numCount.Value;

array = new List<int>();

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

{

array.Add(rnd.Next((int)numMin.Value, (int)numMax.Value));

}

if (cmbGenerate.SelectedIndex == 1)

{

array.Sort();

}

else if (cmbGenerate.SelectedIndex == 2)

{

array.Sort();

array.Reverse();

}

ShowArray(txtGenerate);

btnSort.Enabled = true;

txtView.Text = "";

}

void ShowArray(TextBox textbox)

{

textbox.Text = "";

foreach (int item in array)

{

textbox.Text += item + " ";

}

}

 

private void button1_Click_1(object sender, EventArgs e)

{

txtSteps.Text = "";

if (cmbType.SelectedIndex == 0) //выбрана сортировка простыми включениями

{

int tmp; //temp variable

int comparisons = 0; // количество сравнений

int exchanges = 0; // количество обменов

 

for (int i = 1; i < (int)numCount.Value; ++i)

{

tmp = array[i];

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

{

comparisons++;

if (array[j] > tmp)// сравнение

{

exchanges++; // обмен

array[j + 1] = array[j];

array[j] = tmp;

}

else

break;

foreach (int item in array)

{

txtView.Text += item + " ";

 

 

}

txtView.Text += "\n";

 

}

}

ShowArray(txtSort);

txtSteps.Text += "Сравнений: " + comparisons.ToString() + Environment.NewLine;

txtSteps.Text += "Обменов: " + exchanges.ToString() + Environment.NewLine;

txtSteps.Text += "Операций: " + (comparisons + exchanges).ToString();

}

else if (cmbType.SelectedIndex == 1) //выбрана шейкер-сортировка

{

 

int i, left, right, a, tmp, comparisons = 0, exchanges = 0;

 

for (right = (int)numCount.Value - 1, left = 0, a = -1; a!= 0;)//определяем правую и левую границу

{

a = 0;

for (i = left; i < right; i++)//слева направо

{

comparisons++;

if (array[i] > array[i + 1]) //сравнения

{

exchanges++; //обмен

tmp = array[i];

array[i] = array[i + 1];

array[i + 1] = tmp;

a = i;

}

}

right = a;

for (i = right; i > left; i--)//справа налево

{

comparisons++;

if (array[i - 1] > array[i]) //сравнения

{

exchanges++; //обмен

tmp = array[i];

array[i] = array[i - 1];

array[i - 1] = tmp;

a = i;

}

}

left = a;

foreach (int item in array)

{

txtView.Text += item + " ";

}

txtView.Text += "\n";

}

ShowArray(txtSort);

txtSteps.Text += "Сравнений: " + comparisons.ToString() + Environment.NewLine;

txtSteps.Text += "Обменов: " + exchanges.ToString() + Environment.NewLine;

txtSteps.Text += "Операций: " + (comparisons + exchanges).ToString();

}

}

}

}

4.Исследование программной реализации простых алгоритмов сортировки:

4.1. Примеры пошаговой работы:

Сортировка простыми включениями Шейкер-сортировка
9 6 8 3 8 3 0 6 9 8 3 8 3 0 6 8 9 3 8 3 0 6 8 3 9 8 3 0 6 3 8 9 8 3 0 3 6 8 9 8 3 0 3 6 8 8 9 3 0 3 6 8 8 3 9 0 3 6 8 3 8 9 0 3 6 3 8 8 9 0 3 3 6 8 8 9 0 3 3 6 8 8 0 9 3 3 6 8 0 8 9 3 3 6 0 8 8 9 3 3 0 6 8 8 9 3 0 3 6 8 8 9 0 3 3 6 8 8 9   1 6 0 6 8 1 0   0 1 0 6 6 1 8 0 0 1 1 6 6 8 0 0 1 1 6 6 8

4.2. Зависимость количества сравнений, обменов и их суммы исследуемых алгоритмов сортировки от размерности задачи n для прямого, обратного, случайного и равного расположения элементов в массиве:

Таблица 1 Сортировка простыми включениями, массив упорядочен случайно

n                    
Сравнения                    
Обмен                    
Сумма                    

 

Таблица 2 Сортировка простыми включениями, массив упорядочен по возрастанию

n                    
Сравнения                    
Обмен                    
Сумма                    

 

Таблица 3 Сортировка простыми включениями, массив упорядочен по убыванию

n                    
Сравнения                    
Обмен                    
Сумма                    

 

Таблица 4 Шейкер-сортировка, массив упорядочен случайно

n                    
Сравнения                    
Обмен                    
Сумма                    

 

Таблица 5 Шейкер-сортировка, массив упорядочен по возрастанию

n                    
Сравнения                    
Обмен                    
Сумма                    

 

 

Таблица 6 Шейкер-сортировка, массив упорядочен по убыванию

n                    
Сравнения                    
Обмен                    
Сумма                    

4.3. Графики зависимости показателя качества исследуемых алгоритмов сортировки:

Рисунок 1 – График,при котором исходный массив распределен хаотически

 

Рисунок 2 – График, при котором исходный массив распределен по возрастанию

Рисунок 3 – График, при котором исходный массив распределен по убыванию

5.Выводы:

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

 




Дата добавления: 2015-01-05; просмотров: 38 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав