Другие языки программирования и технологии

как при сортировке одномерного массива оставить на месте неположительные элементы

дан Массив целых чисел, сортировку успешно провожу.
Как сделать так. чтобы при сортировке по возрастанию, элементы массива, которые меньше или равны 0 оставались на месте.
#include < iostream >
#include < iomanip >
#include < random >
using namespace std;

int main()
{
  random_device rnd;
  uniform_int_distribution < int > genN(10, 100);
  int n = genN(rnd);
  int* a = new int [n];
  cout << "Дан массив [" << n << "]:" << endl;
  uniform_int_distribution < int > genV(-99, 99);
  for (int i = 0; i < n; i++)
  {
    a[i] = genV(rnd);
    cout << setw(4) << a[i];
  }

// Сортировка
  for (int i = 0; i < n - 1; i++)
    if (a[i] > 0)
    {
      int imin = i;
      for (int j = i + 1; j < n; j++)
        if (a[j] > 0 && a[j] < a[imin])
          imin = j;
      if (i != imin)
      {
        a[i] ^= a[imin];
        a[imin] ^= a[i];
        a[i] ^= a[imin];
      }
    }

  cout << endl << endl << "Отсортированный массив: " << endl;
  for (int i = 0; i < n; i++)
    cout << setw(4) << a[i];

  cout << endl << endl
    << "Для завершения работы нажмите Enter...";
  cin.get();
  delete a;
  return 0;
}

Пример выполнения программы:
Бакитжан Акниязов
Бакитжан Акниязов
51 590
Лучший ответ
if (a[i]>0) and (a[i]>a[j]) and (a[j]>0) then begin....end;
Kuba Халмуратов Теперь вообще не сортирует. В чем ошибка?

for (a[i]>0; a[i]>a[j] ; a[j]>0 )
{
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;

for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-1-i; j++)
{
if (a[j]>a[j + 1])
{

b = a[j];
a[j] = a[j + 1];
a[j + 1] = b;

}
}
}
cout << " ";
for (int i = 0; i<n; i++)cout << a[i] << " ";
cout << endl;

Похожие вопросы