Skip to content

Instantly share code, notes, and snippets.

@Zulcom
Created May 4, 2020 18:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Zulcom/2f25976bb3fecb16093e7159480eaf23 to your computer and use it in GitHub Desktop.
Save Zulcom/2f25976bb3fecb16093e7159480eaf23 to your computer and use it in GitHub Desktop.
C# - Прочитать два массива, слить их и отсортировать пузырьком, вставками или быстрой сортировкой на выбор пользователя
/*
Написать программу имеющую текстовое меню, реализующую следующие функции:
Решить с использованием: а. Сортировки «Пузырьком», б. Сортировки «вставками», в.
«Быстрой сортировкой»
Даны два упорядоченных набора чисел D1,D2 ,...,Dn и B1,B2,...,Bm. Соединить их в
один упорядоченный массив P.
*/
using System;
namespace arrays
{
class Program
{
static string prompt(string question)
{
Console.WriteLine(question); // пишем запрос в консоль
return Console.ReadLine(); // возвращаем ввод от пользователя в переменную
}
static void bubble(int[] array)
{
int temp;
// Перебираем каждый элемент в массиве
for (int i = 0; i <= array.Length - 2; i++)
{
for (int j = 0; j <= array.Length - 2; j++)
{
// Если два элемента в неправильном порядке - меняем местами
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
// Повторяем это со всеми парами
}
}
}
static void insertion(int[] array)
{
int n = array.Length;
for (int i = 1; i < n; ++i)
{
int key = array[i];
int j = i - 1;
// Перемещаем элементы массива arr[0..i-1],
// Которые больше ключевого,
// на одну позицию назад
while (j >= 0 && array[j] > key)
{
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = key;
}
}
static int partition(int[] array, int start, int end)
{
int temp;
int marker = start;// режет на левый и правый подмассивы
for (int i = start; i <= end; i++)
{
if (array[i] < array[end]) //array[end] - указатель
{
temp = array[marker]; // меняем местами
array[marker] = array[i];
array[i] = temp;
marker += 1;
}
}
// помещаем pivot(array[end]) между левым и правым подмассивом
temp = array[marker];
array[marker] = array[end];
array[end] = temp;
return marker;
}
static void quicksort(int[] array, int start, int end)
{
if (start >= end)
{
return;
}
int pivot = partition(array, start, end);
quicksort(array, start, pivot - 1);
quicksort(array, pivot + 1, end);
}
static string Menu()
{
Console.WriteLine("Выберите сортировку");
Console.WriteLine("1. Сортировка пузырьком");
Console.WriteLine("2. Сортировка вставками");
Console.WriteLine("3. Quicksort");
return Console.ReadLine();
}
static void Main(string[] args)
{
int[] dArray = Array.ConvertAll( // приводим все значения массива полученного в следующей строке
// по правилу из третьей строки
prompt("Введите массив D разделяя числа пробелом").Split(' '), // Разбиваем ввод от пользователя
// по пробелам и складыаем в string[]
s => Int32.Parse(s)); // каждый string приводим в Int
int[] bArray = Array.ConvertAll(prompt("Введите массив B разделяя числа пробелом").Split(' '),
s => Int32.Parse(s));
int userChoice = 0;
while (userChoice < 1 || userChoice > 3)
{
userChoice = Int32.Parse(Menu()); // показываем меню пока пользователь не выберет один из вариантов
}
var merged = new int[dArray.Length + bArray.Length]; // создаем массив под склейку
dArray.CopyTo(merged, 0); // вставляем в начало массив d
bArray.CopyTo(merged, dArray.Length); // с конца массива d вставляем массив b
switch (userChoice) // вызываем сортировку по пользовательскому вводу
{
case 1:
bubble(merged);
break;
case 2:
insertion(merged);
break;
case 3:
quicksort(merged, 0, merged.Length - 1);
break;
}
Console.WriteLine(String.Join(" ", merged)); // выводим получившийся массив в консоль
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment