
C/C++
Помогите пожалуйста с лабораторной работы по С++

Вам все еще нужен помощь?
#include <iostream>
#include <functional>
#include <span>
using namespace std;
struct BaseSort {
virtual void sort(int* box, const size_t len, function<bool(int, int)> fn = less<>()) = 0;
};
struct BubbleSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
auto first = box;
auto last = box + n;
while (first < --last) {
for (auto begin = first; begin < last; ++begin) {
if (fn(*(begin + 1), *begin)) {
swap(*begin, *(begin + 1));
}
}
}
}
};
struct SelectionSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
for (size_t i = 0; i < n - 1; ++i) {
int m = i;
for (size_t j = i + 1; j < n; j++) {
if (fn(box[j], box[m])) {
m = j;
}
}
swap(box[i], box[m]);
}
}
};
struct InsertionSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
auto begin = box;
auto end = box + n;
if (!(begin < end)) return;
for (auto current = begin + 1; current != end; ++current) {
for (auto prev = current; prev != begin && fn(*prev, *(prev - 1)); --prev) {
iter_swap(prev - 1, prev);
}
}
}
};
void show(span<int> box) {
for (auto x : box) cout << x << ' ';
puts("");
}
int main() {
const auto n = 10U;
const auto m = n >> 1;
puts("Bubble Sort:");
int a[n]{ 3, 9, 0, 7, 8, 5, 2, 4, 6, 1 };
show(a);
BubbleSort bs;
bs.sort(a, m);
bs.sort(a + m, m, greater<>());
show(a);
puts("");
puts("Selection Sort:");
int b[n]{ 3, 0, 7, 5, 2, 4, 6, 9, 8, 1 };
show(b);
InsertionSort is;
is.sort(b, m);
is.sort(b + m, m, greater<>());
show(b);
puts("");
puts("Insertion Sort:");
int c[n]{ 9, 3, 5, 4, 6, 0, 7, 2, 8, 1 };
show(c);
SelectionSort ss;
ss.sort(c, m);
ss.sort(c + m, m, greater<>());
show(c);
system("pause > nul");
}
#include <functional>
#include <span>
using namespace std;
struct BaseSort {
virtual void sort(int* box, const size_t len, function<bool(int, int)> fn = less<>()) = 0;
};
struct BubbleSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
auto first = box;
auto last = box + n;
while (first < --last) {
for (auto begin = first; begin < last; ++begin) {
if (fn(*(begin + 1), *begin)) {
swap(*begin, *(begin + 1));
}
}
}
}
};
struct SelectionSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
for (size_t i = 0; i < n - 1; ++i) {
int m = i;
for (size_t j = i + 1; j < n; j++) {
if (fn(box[j], box[m])) {
m = j;
}
}
swap(box[i], box[m]);
}
}
};
struct InsertionSort : virtual public BaseSort {
void sort(int* box, const size_t n, function<bool(int, int)> fn = less<>()) override {
auto begin = box;
auto end = box + n;
if (!(begin < end)) return;
for (auto current = begin + 1; current != end; ++current) {
for (auto prev = current; prev != begin && fn(*prev, *(prev - 1)); --prev) {
iter_swap(prev - 1, prev);
}
}
}
};
void show(span<int> box) {
for (auto x : box) cout << x << ' ';
puts("");
}
int main() {
const auto n = 10U;
const auto m = n >> 1;
puts("Bubble Sort:");
int a[n]{ 3, 9, 0, 7, 8, 5, 2, 4, 6, 1 };
show(a);
BubbleSort bs;
bs.sort(a, m);
bs.sort(a + m, m, greater<>());
show(a);
puts("");
puts("Selection Sort:");
int b[n]{ 3, 0, 7, 5, 2, 4, 6, 9, 8, 1 };
show(b);
InsertionSort is;
is.sort(b, m);
is.sort(b + m, m, greater<>());
show(b);
puts("");
puts("Insertion Sort:");
int c[n]{ 9, 3, 5, 4, 6, 0, 7, 2, 8, 1 };
show(c);
SelectionSort ss;
ss.sort(c, m);
ss.sort(c + m, m, greater<>());
show(c);
system("pause > nul");
}
Похожие вопросы
- Помогите, пожалуйста, решить задание. Работа с двумерными массивами.
- Лабораторная работа c++
- Лабораторная работа. Классы. Передача объекта в качестве аргумента.
- Лабораторная работа по алгоритмам (C++)
- Лабораторная работа на языке Си
- Работа с матрицами. Нужно найти сумму элементов каждой строки. Помогите пожалуйста ????????
- Помоги пожалуйста с программой в С++
- Помогите пожалуйста написать программу на Си
- Помогите пожалуйста уже голову сломал, ничего не получается, когда перегружаю шаблонный оператор << ,
- Помогите пожалуйста написать код.(C++)