From 455ef1ba541ba5c1447469066109708db39063c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=8B=D1=82=D0=BA=D0=BE=D0=B2=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Sat, 26 Jul 2025 22:44:47 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=93=D0=BB=D0=B0=D0=B2=D0=B0=204]=20=D0=91?= =?UTF-8?q?=D1=8B=D1=81=D1=82=D1=80=D0=B0=D1=8F=20=D1=81=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter4_QuickSort/Program.cs | 7 +++++++ Chapter4_QuickSort/QuickSort.cs | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 Chapter4_QuickSort/QuickSort.cs diff --git a/Chapter4_QuickSort/Program.cs b/Chapter4_QuickSort/Program.cs index 65b9f80..9afbc75 100644 --- a/Chapter4_QuickSort/Program.cs +++ b/Chapter4_QuickSort/Program.cs @@ -17,3 +17,10 @@ int target = 42; int index = Task4_4.BinSearch(sortedArr, target, 0, sortedArr.Length - 1); Console.WriteLine($"4.4. Индекс числа {target} в массиве: {index}"); +// Пример использования QuickSort +List unsorted = new() { 5, 2, 9, 1, 7, 3 }; +Console.WriteLine("Быстрая сортировка"); +Console.WriteLine($"Неотсортированный список: {string.Join(", ", unsorted)}"); +var sorted = QuickSort.Sort(unsorted, Comparer.Default); +Console.WriteLine($"Отсортированный список: {string.Join(", ", sorted)}"); + diff --git a/Chapter4_QuickSort/QuickSort.cs b/Chapter4_QuickSort/QuickSort.cs new file mode 100644 index 0000000..ecac3be --- /dev/null +++ b/Chapter4_QuickSort/QuickSort.cs @@ -0,0 +1,37 @@ +static class QuickSort +{ + private static readonly Random _rnd = Random.Shared; + + public static List Sort(List source, Comparer comparer) + { + if (source.Count < 2) + return source; + + var referenceIndex = _rnd.Next(source.Count); + var reference = source[referenceIndex]; + var less = new List(); + var equal = new List(); + var more = new List(); + + for (var i = 0; i < source.Count; i++) + { + var value = source[i]; + if (comparer.Compare(value, reference) < 0) + less.Add(value); + else if (comparer.Compare(value, reference) > 0) + more.Add(value); + else if (comparer.Compare(value, reference) == 0) + equal.Add(value); + } + less = Sort(less, comparer); + more = Sort(more, comparer); + var index = 0; + foreach (var item in less) + source[index++] = item; + foreach (var item in equal) + source[index++] = item; + foreach (var item in more) + source[index++] = item; + return source; + } +} \ No newline at end of file