Требуется расположить элементы массива по возрастанию

Сложная и хвостовая работают некорректно, не могу найти причину:

 #include <iostream>
 #include <time.h>

 using namespace std;
 int* complex_recursion2(int*, int, int); //Прототип complex_recursion2
 int* complex_recursion1(int*, int, int); //Прототип complex_recursion1

 int* form_mass(int size)
 {
 int* arr = new int[size];
 for (int i = 0; i < size; i++)
 {
   arr[i] = rand() % 101 - 50;
   cout << arr[i] << " ";
  }
 cout << " \n";
 return arr;

}

int* fun(int* pMass, int size, int k = 0) {
 if (k != size) {
 for (int i = size - 1; i > k; --i) {
    if (pMass[i] < pMass[i - 1]) {
        int buf = pMass[i];
        pMass[i] = pMass[i - 1];
        pMass[i - 1] = buf;
    }
 }
 fun(pMass, size, ++k);
 }
 return pMass;
 }

 int* complex_recursion1(int* pMass, int size, int k = 0) {
 if (k != size) {
 for (int i = size - 1; i > k; --i) {
    if (pMass[i] < pMass[i - 1]) {
        int buf = pMass[i];
        pMass[i] = pMass[i - 1];
        pMass[i - 1] = buf;
    }
 }
 complex_recursion2(pMass, size, ++k);
 }
 return pMass;
 }

 int* complex_recursion2(int* pMass, int size, int k = 0) {
 if (k != size) {
 for (int i = size - 1; i > k; --i) {
    if (pMass[i] < pMass[i - 1]) {
        int buf = pMass[i];
        pMass[i] = pMass[i - 1];
        pMass[i - 1] = buf;
    }
 }
 complex_recursion1(pMass, size, ++k);
 }
 return pMass;
 }



int* tail_recursion(int* pMass, int size, int k = 0) {
if (k != size) {
for (int i = size - 1; i > k; --i) {
    if (pMass[i] < pMass[i - 1]) {
        int buf = pMass[i];
        pMass[i] = pMass[i - 1];
        pMass[i - 1] = buf;
    }
}
return tail_recursion(pMass, size, ++k);
}
return pMass;
}


int main()
{
srand(time(NULL));
setlocale(LC_ALL, "rus");
int k;
int size = 1;
int* pMass = nullptr;
do {
cout << "1.Простая рекурсия." << endl;
cout << "2.Сложная рекурсия." << endl;
cout << "3.Хвостовая рекурсия." << endl;
cout << "4.Выход" << endl;
cin >> k;
switch (k) {
case 1:
    cout << "Введите количество целых чисел: ";
    cin >> size;
    pMass = form_mass(size);
    pMass = fun(pMass, size);
    for (int i = 0; i < size; i++)
    {
        cout << pMass[i] << " ";
    }
    cout << endl;
    break;

case 2:
    cout << "Введите количество целых чисел: ";
    cin >> size;
    pMass = form_mass(size);
    pMass = complex_recursion2(pMass, size, ++k);
    for (int i = 0; i < size; i++)
    {
        cout << pMass[i] << " ";
    }
    cout << endl;
    break;
case 3:
    cout << "Введите количество целых чисел: ";
    cin >> size;
    pMass = form_mass(size);
    pMass = tail_recursion(pMass, size, k);

    for (int i = 0; i < size; i++)
    {
        cout << pMass[i] << " ";
    }
    cout << endl;
    break;
  case 4: break;
  }
 } while (k != 4);

return 0;

} 

Ответы (1 шт):

Автор решения: Влад Бочкарёв

Могу предложить использовать multiset.

    multiset<int> mst;
    mst.insert(23);
    mst.insert(3);
    mst.insert(45);
    mst.insert(-2);

    for (auto a : mst) {
        cout << a << endl;
    }
→ Ссылка