Сортировка массива. - страница 2

 
HIDDEN:

Все приведенные коды не рабочие...

Видимо, вы запускать не умеете.

Тест:

void start()
{
  double Array[10] = { 50.24, -20.18, -30.55, 50.25, -19.18, -10.22, 40.45, -40.79, -50.12, 30.57 };
  string Str = "";
  
  SortByABS(Array, MODE_DESCEND);
  
  for(int i = 0; i < 10; i++)
    Str = Str + " " + DoubleToStr(Array[i], 2);

  Print(Str);
    
  return;
}

Результат:

P.S. // Сортировка вектора по абсолютному значению элементов

 
HIDDEN:

Все приведенные коды не рабочие, т.е. не выполняют задачу максимум - минимам - максимум и т.д. если применять к следующему массиву (предварительная сортировка массива тоже не помогает).

double Array[] = { 50.24, -20.18, -30.55, 50.25, -19.18, -10.22, 40.45, -40.79, -50.12, 30.57 };

Мой код пока еще справляется с задачей.

Вот что получается... здесь не равное количество положительных и отрицательных чисел.

а что не устраивает ?

 
hrenfx:

Видимо, вы запускать не умеете.

Тест:

Результат:

P.S. // Сортировка вектора по абсолютному значению элементов


Видимо, вы не поняли смысла задачи.

VladislavVG Ваш код когда на новом массиве запускал не получил нужного результата, предварительную сортировку делал и по убыванию и по возрастанию.

Сейчас запустить проверить не могу, но привиденная Вами строка правильная. Покапаю еще Ваш код.

 
HIDDEN:

Видимо, вы не поняли смысла задачи.

VladislavVG Ваш код когда на новом массиве запускал не получил нужного результата, предварительную сортировку делал и по убыванию и по возрастанию.

Сейчас запустить проверить не могу, но привиденная Вами строка правильная. Покапаю еще Ваш код.

double Array[] = { 50.24, -20.18, -30.55, 50.25, -19.18, -10.22, 40.45, -40.79, -50.12, 30.57 };//{ 50, 40, 30, 20, 10, -10, -20, -30, -40, -50 };
double Array2[];
int start()
  {
//----
int aSz = ArraySize(Array);
   ArrayResize(Array2,aSz);
   ArraySort(Array,WHOLE_ARRAY,0,MODE_DESCEND);
   int j=aSz-1;
   int i=0;
   for(int k=0;k<aSz;k+=2,i++,j--)
   {
       Array2[k]   = Array[i];
       Array2[k+1] = Array[j];
   }
//----
   string rez = "";
   for(k=0;k<aSz;k++)
   {
      rez= rez + DoubleToStr(Array2[k],4) + " ";
   }
   Print(rez);
   return(0);
  }

или вот вариант:

double Array[] = { 50.24, -20.18, -30.55, 50.25, -19.18, -10.22, 40.45, -40.79, -50.12, 30.57 };//{ 50, 40, 30, 20, 10, -10, -20, -30, -40, -50 };
double Array2[];
int start()
  {
//----
int aSz = ArraySize(Array);
   ArrayResize(Array2,aSz);
   ArraySort(Array,WHOLE_ARRAY,0,MODE_DESCEND);
   int j=aSz-1;
   int i=0;
   //for(int k=0;k<aSz;k+=2,i++,j--)
   int k=0;
   while(i<j)
   {
       Array2[k]   = Array[i];
       Array2[k+1] = Array[j];
       i++;
       j--;
       k+=2;
   }
//----
   string rez = "";
   for(k=0;k<aSz;k++)
   {
      rez= rez + DoubleToStr(Array2[k],4) + " ";
   }
   Print(rez);
   return(0);  
}

- результат идентичен

Причина обращения: