C/C++

Помогите, пожалуйста, с заданием по программированию.

Условие: Отсортировать по возрастанию элементы массива, находящиеся между первым и
последним элементами, в которых первой цифрой после запятой является 3. Использовать алгоритм сортировки выбором.

Что получается:

#include <iostream>
using namespace std;

int main() {
setlocale(LC_ALL, "");
double A[10] = { 1, 2, 4.3, 3, 2.3, 5, 10, 1.3, 30 }, a;

for (int i = 1; i < 8 && i > 0; ++i) {
a = ((int)(A[i] * 10)) % 10;
if(a == 3)
}
}

И не могу понять, что делать дальше...
1. Найти индекс первого элемента массива который отвечает заданному условию, для чего начать проверку элементов массива на соответствие с начала массива.
2.1. Если дойдя до конца массива такого элемента не обнаружено, сообщить об этом пользователю и прекратить дальнейший поиск.
2.2. Если соответствующий элемент обнаружен запомнить его индекс и выйти из цикла.
3. Найти индекс последнего элемента массива который отвечает заданному условию, для чего начать проверку элементов массива на соответствие с конца массива.
4. Найти последний соответствующий элемент в массиве, запомнить его индекс и выйти из цикла.
5. Если индекс последнего соответствующего элемента равен индексу первого соответствующего элемента, то такой элемент в массиве единственный, о чём следует сообщить пользователю и прекратить дальнейшее выполнение алгоритма.
6. Если индексы массива отличаются, то индекс первого элемента массива следует увеличить на единицу.
7. Если разность между индексами последнего и первого элементов меньше двух, то сортировка не требуется, о чём также можно сообщить пользователю. Прекратить дальнейшее выполнение алгоритма.
8. Иначе следует отсортировать выбранный диапазон методом выбора, вызвав следующую функцию, передав в неё первым аргументом адрес первого соответствующего элемента, а вторым разность между индексами последнего и первого соответствующих элементов.

void selection_sort(int* box, const size_t n) {
for (int i = 0; i < n - 1; ++i) {
int m = i;
for (int j = i + 1; j < n; j++) {
if (box[j] < box[m]) {
m = j;
}
}
swap(box[i], box[m]);
}
}

size_t first = 2;
++first;
size_t last = 7;
size_t length = last - first;
int* begin = A[first];
selection_sort(begin, length);
ВА
Виктор Артюх
65 063
Лучший ответ
#include < iostream >
using namespace std;

void selection_sort(double* box, const size_t n) { //любезно скопипастил у Веселухи
for (int i = 0; i < n - 1; ++i) {
int m = i;
for (int j = i + 1; j < n; j++) {
if (box[j] < box[m]) {
m = j;
}
}
swap(box[i], box[m]);
}
}

int main() {
setlocale(LC_ALL, "");
int it_b = -1, it_end = -1;
double A[10] = { 1, 2, 4.3, 3, 2.4, 5, 10, 1.3, 30, 2 }, a;
double faa;

for (int i = 0; i < 10; ++i) {
a = modf(A[i], &faa); a = a * 10;
cout << a << endl;
if (a > 2.1 && a < 3.1)
if (it_b == -1) it_b = i; else
{
it_end = i; break;
}
}
if (it_end == -1) { cout << "Нет двух необходимых элементов"; return 1; }
selection_sort(A + it_b+1, it_end-it_b-1);
puts("");
for (double& ass : A) cout << ass << " ";
}
Виктор Артюх В программировании это называется повторное использование кода :)
Равиль Амиров Вся прелесть кода от надежных людей - он работает)
Правда пришлось int* заменить на double*