C/C++

Как отсортировать массив в зависимости от третьего параметра функции?

Если он равен true, сортировка идет по убыванию, если false, то по возрастанию. Первые 2 параметра функции — это массив и его размер, третий параметр по умолчанию равен false.
Прописала основную часть кода, но не могу понять как изменить сортировку в зависимости от выбора пользователя.(когда прописываю if (UserChoice ='1'){sortIncrease(a, lengt, UserChoice);printarray(a, lengt);} он не выводится в консоль и значение третьей переменной остаётся тем же
 #include 

#include

using namespace std;

void sortIncrease(int a[], const int length, bool IsOn = false) {

for (size_t i = 0; i < length; i++)

{

for (size_t j = 0; j < length; j++)

{

if (a[i] > a[j]) {

a[i] = a[j] + a[i];

a[j] = a[i] - a[j];

a[i] = a[i] - a[j];

}

}

}

}

void sortDecrease(int a[], const int length, bool IsOn = false) {

for (size_t i = 0; i < length; i++)

{

for (size_t j = 0; j < length; j++)

{

if (a[i] < a[j]) {

a[i] = a[j] + a[i];

a[j] = a[i] - a[j];

a[i] = a[i] - a[j];

}

}

}

}



void printarray(const int a[], const int length)

{

for (int i = 0; i < length; i++)

cout
Так можно:
#include <iostream>
using namespace std;
void sorting(int a[], const int length, bool IsOn)
{
if (IsOn)
{
for (size_t i = 0; i < length; i++)
for (size_t j = 0; j < length; j++) if (a[i] < a[j])
{ a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; }
}
else
{ for (size_t i = 0; i < length; i++)
for (size_t j = 0; j < length; j++) if (a[i] > a[j])
{ a[i] += a[j]; a[j] = a[i] - a[j]; a[i] -= a[j]; }
}
}
void printarray(const int a[], const int length)
{ for (int i = 0; i < length; i++) cout << a[i] << " "; }
int main()
{
const int length = 10;
int choice;
int a[length] = {1, 3, 5, 2, 8, 11, 9, 4, 15, 19};
printarray(a, length);
cout << "\nChoose sorting metod:\n" <<
"1-> increasing\n0->decreasing" << endl;
cin >> choice;
sorting(a, length, choice);
printarray(a, length);
}
Александр Гуринович
Александр Гуринович
66 572
Лучший ответ
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
void usort(int* box, size_t length, bool status) {
if (status) sort(box, box + length, greater<>());
else sort(box, box + length);
}
void show(int* box, const size_t length) {
for (size_t i = 0; i < length; ++i) {
cout << box[i] << ' ';
}
puts("");
}
int main() {
int box[]{ 1, 3, 5, 2, 8, 11, 9, 4, 15, 19 };
const auto length = size(box);
show(box, length);
cout << "Choice: ";
bool choice = cin.get() != '0';
usort(box, length, choice);
show(box, length);
}
Сергей Ищишин
Сергей Ищишин
82 397
Игорь Седневец К сожалению, данный метод не подходит, из-за использования непройденных методов(algorithm,int*,cin.get())
Сергей Нестеренко Похоже, в greater съедено int
В первоначальной версии у вас ошибка сравнения:
if (UserChoice == '1').
1 это не то же самое что '1', потому что это разные типы;
1 - это int; Так же как и UserChoice;
'1' - это char; char в переводе на int дает другое значение.


поэтому сравнивать их не правильно. Если у вас явно указана функции increase и decreace, то третий параметр для них не нужен. Можете его безболезненно убрать. Однако если уж так хочется то эти две функции можно обьединить в одну, которая будет использовать третий параметр:

void universal_sort(int a[], const int length, bool IsOn = false)
{
IsOn ? sortDecrease(a, length) : sortIncrease(a, length);
};

и вызывать ее из основной программы:
universal_sort(a, lengt, UserChoice);