Скачать MetaTrader 5

Сортировка массива содержащего в т. ч. одинаковые данные.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
slba
82
slba  
Допустим массив arr[] содержит данные 0,0,0,0,1,2,3,4,5,1,1,1,1,5,5,5,5 в результате в массиве arr1[] необходимо получить данные 0,1,2,3,4,5. Т. е. массив содержащий различные между собой и одинаковые между собой данные преобразоать (отсортировать) в массив содержащий только различные между собой данные. Размерность массива не принципиальна. В моем случае двумерный массив [0]-данные [1]-индекс.
Ronen Kagan
806
Ronen Kagan  
Вот я тут что-то наляпал, должно работать... :)
neverUsedValue любое значение которое не может встречаться никогда в передаваемом массиве...

int start()
  {
int arr[]={0,0,0,0,1,2,3,4,5,1,1,1,1,5,5,5,5};
int size=arrangeArray(arr,-1);
for(int i=0;i<size;i++)
Print(arr[i]);
   return(0);
  }
//+------------------------------------------------------------------+
 
int arrangeArray(int& arr[],int neverUsedValue)
{
int size=ArraySize(arr);
int counter=0;
for(int i=0;i<size;i++)
   if (arr[i]!=neverUsedValue)
      {   
      arr[counter]=arr[i];
      for(int j=counter+1;j<size;j++)
          if (arr[j]==arr[counter])arr[j]=neverUsedValue;
      counter++;
      }
 
ArrayResize(arr,counter);
ArraySort(arr);
return (counter);
}
Юрий Макаров
358
Юрий Макаров  
Вот так вроде лучше (и быстрее)
int start()
{
   int arr[] = {0,0,0,0,1,2,3,4,5,1,1,1,1,5,5,5,5};
   int size = arrangeArray(arr);
   for(int i = 0; i < size; i++) Print(i," ",arr[i]);
 
}
 
int arrangeArray(int& arr[])
{
   int size = ArraySize(arr);
   int counter = 1;
   for(int i = 1; i < size; i++)
   {
      bool newItem = true;
      for(int j = 0; j < counter; j++)
      if (arr[i] == arr[j]) 
      {
         newItem = false;
         break;
      }
      if (newItem)
      {
         arr[counter] = arr[i];
         counter++;
      }
   }
   ArrayResize(arr,counter);
   ArraySort(arr);
   return (counter);
}
Ronen Kagan
806
Ronen Kagan  
Mak писал (а):
Вот так вроде лучше (и быстрее)
....
Однако и так хорошо.. а теперь вопрос на засыпку... К чему эта функция???
Dmitry Fedoseev
47055
Dmitry Fedoseev  
Ronen:
Mak писал (а):
Вот так вроде лучше (и быстрее)
....
Однако и так хорошо.. а теперь вопрос на засыпку... К чему эта функция???

Наверно парень курсовик пишет:-)
slba
82
slba  
Integer писал (а):
Ronen:
Mak писал (а):
Вот так вроде лучше (и быстрее)
....
Однако и так хорошо.. а теперь вопрос на засыпку... К чему эта функция???

Наверно парень курсовик пишет:-)
Для меня может и курсовик ( третий месяц освоения МТ4 ранеееееее к программированию только к ассемблеру как электронщик)
Но тем не менее Спасибо за ответ.
А задача моя пока состоит в анализе одновременной реакции некоторых индикаторов и тайм-серий на положительные мне события по истории. Результатом реакции является создаваемый массив, который сопоставляется с текущей ситуацией на каждом тике, создавая дополнительный параметр и если хотите фильтр. И если в массиве до 1000 и более значений, из которых только третья часть различаются между собой, зачем мне другими одинаковыми значениями нагружать компьютер.
Алексей Тарабанов
7399
Алексей Тарабанов  
Вычурно, как-то... Можно гораздо проще. 
Alexey Viktorov
20914
Alexey Viktorov  
Алексей, ну зачем ты застыдил человека? Не все ведь успели посмотреть...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий