Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Министерство образования и науки Украины.docx
Скачиваний:
3
Добавлен:
22.12.2018
Размер:
1.08 Mб
Скачать

Глава 2. Практическая часть

Задача:

Разработать проект, который позволяет сортировать заданный линейный массив целых чисел различными методами, например, методом линейной сортировки, пузырька, Шелла и др. Предусмотреть использование не менее трёх методов.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

const int n = 100;

int[] Ar;

{

Ar = new int[n];

Random a = new Random();

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

Ar[i] = a.Next(0, 100);

Console.WriteLine("\n Диапазон [0,100]:");

Console.WriteLine();

int min = 0;

int x;

int m = 0; //счётчик проходов

int y;

do

{

string buf;

Console.WriteLine("1-сортировка выбором ");

Console.WriteLine("2-сортировка пузырьком");

Console.WriteLine("3-сортировка Шелла");

buf = Console.ReadLine();

int k = Convert.ToInt32(buf);

switch (k)

{

case 1:

//сортировка выбором

{

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

{ // i - номер текущего шага

min = i; x = Ar[i];

for (int j = i + 1; j < n; j++) // цикл выбора наименьшего элемента

{

if (Ar[j] < x)

{

min = j; x = Ar[j];

}

m = m + 1;

}

Ar[min] = Ar[i]; Ar[i] = x; // меняем местами наименьший с Ar [i]

}

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

{

Console.Write(Ar[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Количество проходов сортировкой выбором: " + m);

Console.WriteLine();

}

break;

case 2:

//сортировка пузырьком

{

m = 0;

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

{ // i - номер прохода

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

{ // внутренний цикл прохода

if (Ar[j - 1] > Ar[j])

{

x = Ar[j - 1]; Ar[j - 1] = Ar[j]; Ar[j] = x;

}

m = m + 1;

}

}

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

{

Console.Write(Ar[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Количество проходов сортировкой пузырьком: " + m);

Console.WriteLine();

}

break;

case 3:

//Сортировка Шелла

{

int step = Ar.Length / 2;

m = 0;

while (step > 0)

{

for (int i = 0; i < (Ar.Length - step); i++)

{

int j = i;

while ((j >= 0) && (Ar[j] > Ar[j + step]))

{

int tmp = Ar[j];

Ar[j] = Ar[j + step];

Ar[j + step] = tmp;

j--;

m = m + 1;

}

}

step = step / 2;

}

for (int i = 0; i < Ar.Length; i++)

{

Console.Write(Ar[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Количество проходов сортировкой Шелла: " + m);

Console.WriteLine();

}

break;

default:

Console.WriteLine("Default case");

break;

}

Console.WriteLine("Желаете продолжить? - {0} или {1}");

buf = Console.ReadLine();

y = Convert.ToInt32(buf);

}

while (y == 1);

}

}

}

}