C/C++

Возникла проблема при написании кода (с++). Помогите пожалуйста.

Учу в колледже программирование уже несколько месяцев.
Сейчас от меня требуют выполнение лабораторной до завтра.
Вот задание:

Дан одномерный массив состоящий из 10 целых чисел.
Заполните массив и отсортируйте первые 5 элементов в порядке возрастания, а следующие 5 - в порядке убывания.
Примените методы Bubble Sort, Selection Sort и Insertion Sort.

#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
float a[10];
int size = 10;
int tmp;
for (int i = 0; i < size; i++)
{
cout << "Введите число: " << endl;
cin >> a[i];
}
for (int i = 0; i < size; i++)
{
cout << a[i] << " ";
}
cout << endl << "Пузырьковая Сортировка" << endl;
for (int i = 0; i < size; i++)
{
for (int f = 0; f < 5; f++)
{
if (a[f] < a[f + 1])
{
tmp = a[f];
a[f] = a[f + 1];
a[f + 1] = tmp;
}
}
}
for (int i = 0; i < size; i++)
{
for (int g = 6; g < size; g++)
{
if (a[g] > a[g + 1])
{
tmp = a[g];
a[g] = a[g + 1];
a[g + 1] = tmp;
}
}
}
}


Вот что я, пока что, написал.
Не ругайтесь если что, я совсем начинающий.
Перейдем к проблеме. Я с таким сталкиваюсь впервые.
Когда я пытаюсь скомпилировать код, то по началу все работает, но сортировка не выполняется, а Visual Studio выдает то, что мне никак не ясно:
float a[10]; // 10 элементов с индексами 0-9

for (int g = 6; g < size; g++) {
if (a[g] > a[g + 1]) // при g = 9 происходит обращение к элементу a[10]
Адамбек Орынбеков
Адамбек Орынбеков
17 671
Лучший ответ
Юрий Сидоров огромное спасибо
#include <iostream>
#include <functional>
#include <span>
#include <cstdlib>
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]{ 3, 5, 4, 6, 9, 0, 7, 2, 8, 1 };
show(c);
SelectionSort ss;
ss.sort(c, m);
ss.sort(c + m, m, greater<>());
show(c);
system("pause > nul");
}