Назад к вопросам
Junior — Middle
101
Есть ли у вас примеры задач, выполненных с особым удовлетворением?
Компании, где спрашивали
ООО Флат
Ответ от нейросети
sobes.tech AI
Одним из примеров задачи, выполненной с особым удовлетворением, была реализация эффективного алгоритма сортировки для большого массива данных на C++. Задача требовала оптимизации по времени и памяти. Я использовал алгоритм быстрой сортировки с улучшениями, такими как выбор медианы в качестве опорного элемента и переход на сортировку вставками для маленьких подмассивов. Это позволило значительно ускорить работу программы.
#include <iostream>
#include <vector>
void insertionSort(std::vector<int>& arr, int left, int right) {
for (int i = left + 1; i <= right; ++i) {
int key = arr[i];
int j = i - 1;
while (j >= left && arr[j] > key) {
arr[j + 1] = arr[j];
--j;
}
arr[j + 1] = key;
}
}
int medianOfThree(std::vector<int>& arr, int left, int right) {
int mid = left + (right - left) / 2;
if (arr[right] < arr[left]) std::swap(arr[left], arr[right]);
if (arr[mid] < arr[left]) std::swap(arr[mid], arr[left]);
if (arr[right] < arr[mid]) std::swap(arr[right], arr[mid]);
return mid;
}
void quickSort(std::vector<int>& arr, int left, int right) {
if (right - left <= 10) {
insertionSort(arr, left, right);
return;
}
int pivotIndex = medianOfThree(arr, left, right);
int pivot = arr[pivotIndex];
std::swap(arr[pivotIndex], arr[right]);
int i = left;
for (int j = left; j < right; ++j) {
if (arr[j] < pivot) {
std::swap(arr[i], arr[j]);
++i;
}
}
std::swap(arr[i], arr[right]);
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
std::vector<int> data = {10, 7, 8, 9, 1, 5};
quickSort(data, 0, data.size() - 1);
for (int num : data) {
std::cout << num << " ";
}
return 0;
}
Результат — стабильная и быстрая сортировка, что повысило производительность проекта.