- •Сортировка линейного массива целых чисел
- •Глава 2. Практическая часть 19
- •Глава 1. Теоретическая часть
- •1.1 История языка Visual c#
- •1.2 Среда Visual Studio.Net
- •1.3 Массивы
- •1.4 Random (Генератор псевдослучайных чисел)
- •1.5 Операторы
- •1.6 Методы сортировки
- •Глава 2. Практическая часть
- •Заключение
- •Список литературы
Глава 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);
}
}
}
}