Проблема: cортировка больших массивов может быть неэффективной при использовании простых алгоритмов, таких как сортировка пузырьком или вставками.
Решение: Автор в книге Algorithms and Data Structures for OOP With C# демонстрирует реализацию QuickSort — одного из самых эффективных алгоритмов сортировки на практике, с рекурсивным разбиением массива.
Пример кода:
public class QuickSortExample
{
public void QuickSort(int[] arr, int low, int high)
{
if (low < high)
{
int pi = Partition(arr, low, high);
QuickSort(arr, low, pi - 1);
QuickSort(arr, pi + 1, high);
}
}
private int Partition(int[] arr, int low, int high)
{
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++)
{
if (arr[j] < pivot)
{
i++;
(arr[i], arr[j]) = (arr[j], arr[i]);
}
}
(arr[i + 1], arr[high]) = (arr[high], arr[i + 1]);
return i + 1;
}
}
Преимущества:
— Быстрая сортировка даже больших наборов данных
— Средняя сложность O(n log n)
— Эффективное использование памяти за счет рекурсии
Please open Telegram to view this post
VIEW IN TELEGRAM
⁉️ Тормозит карьерный рост? Упираетесь в потолок с текущими навыками на C#? Новые проекты ускользают, а вы застряли на уровне Middle?
🔥 Пройдите тест! 💻 Ответьте на 32 вопроса и узнайте, достаточно ли у вас знаний, для обучения на онлайн-курсе «C# Developer. Professional» от OTUS.
Вас ждут реальные проекты в Scrum-командах, продвинутый уровень работы с C#, освоение SQL и NoSQL, кэширование, Unit-тесты и CI/CD.
🦾 Пора стать тем самым разработчиком, которого компании хантят друг у друга. Нужно только перейти на принципиально новый уровень.
👉 Пройдите тест и присоединяйтесь к группе: https://otus.pw/WEvA/
#реклама
О рекламодателе
🔥 Пройдите тест! 💻 Ответьте на 32 вопроса и узнайте, достаточно ли у вас знаний, для обучения на онлайн-курсе «C# Developer. Professional» от OTUS.
Вас ждут реальные проекты в Scrum-командах, продвинутый уровень работы с C#, освоение SQL и NoSQL, кэширование, Unit-тесты и CI/CD.
🦾 Пора стать тем самым разработчиком, которого компании хантят друг у друга. Нужно только перейти на принципиально новый уровень.
👉 Пройдите тест и присоединяйтесь к группе: https://otus.pw/WEvA/
#реклама
О рекламодателе
Трюк: добавление элементов в словарь со списками через `??=`
Разбор:
- При обращении к dict[key] отсутствующий ключ вернёт default(List<int>), то есть null.
- Оператор ??= проверяет левую часть на null и, если она null, присваивает справа новое значение.
- В нашем случае, если dict[key] был null, создаётся новый List<int> и сразу сохраняется в словаре.
- После этого метод .Add(item) вызывается уже на существующем списке.
- В результате за одну строчку мы и проверили наличие, и создали новый список при необходимости, и добавили элемент.
var dict = new Dictionary<string, List<int>>();
string key = "numbers";
int item = 42;
// Обычный способ:
if (!dict.TryGetValue(key, out var list))
{
list = new List<int>();
dict[key] = list;
}
list.Add(item);
// Короткий трюк:
(dict[key] ??= new List<int>()).Add(item);
Разбор:
- При обращении к dict[key] отсутствующий ключ вернёт default(List<int>), то есть null.
- Оператор ??= проверяет левую часть на null и, если она null, присваивает справа новое значение.
- В нашем случае, если dict[key] был null, создаётся новый List<int> и сразу сохраняется в словаре.
- После этого метод .Add(item) вызывается уже на существующем списке.
- В результате за одну строчку мы и проверили наличие, и создали новый список при необходимости, и добавили элемент.