Created
May 4, 2020 18:35
-
-
Save Zulcom/2f25976bb3fecb16093e7159480eaf23 to your computer and use it in GitHub Desktop.
C# - Прочитать два массива, слить их и отсортировать пузырьком, вставками или быстрой сортировкой на выбор пользователя
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Написать программу имеющую текстовое меню, реализующую следующие функции: | |
Решить с использованием: а. Сортировки «Пузырьком», б. Сортировки «вставками», в. | |
«Быстрой сортировкой» | |
Даны два упорядоченных набора чисел 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