как долго будет считать такой цикл Erray [1051200][3] - страница 3

 
Candid >>:
Ну может ещё на всякий случай проверку границ перед обращением к массиву таки вставить :)

На быстродействии скажется. ;)

Проще гарантировано увеличить размерность.

Но на минутках нереально разница в 3000 котиров.

 
Вроде понял как надо сделать
extern int n=1051200; //за 2 года
 int x=0;
//+------------------------------------------------------------------+
int start()
{
  if(x==0)
   {
      int Handle,                         // Файловый описатель
          Qnt_Symb;                       // Количество записанных симв.
      string File_Name="Kvant_detector.csv";        // Имя файла
      int Erray [1051200][2];                  // Массив на n
      int Erray_max_min [200][2];                  // Массив на n
      x=1;
      int n3=0;
      for(int i=0;i<n;i++)
       { 
         Erray[i,0]=i;
         Erray[i,1]=Volume[1+i]-Volume[2+i];
       }
      //-------------------макс-мин-------------------------------------- 
      int max=0;// maкcимальное значение на выборке 
      int min=0;// минимальное значение на выборке
      for( i=0;i<n;i++)
       { 
         if(Erray[i,1]>=max){max=Erray[i,1];}
         if(Erray[i,1]<=min){min=Erray[i,1];}
       }
      //----------------------проба альтернативной отсортировки------------
      while(min!=max)
      {
        int n1=0;
        for( i=0;i<n;i++)
          { 
            if(Erray[i,1]==min){n1++;}
          }
        Erray_max_min[n3,0]=min;  
        Erray_max_min[n3,1]=n1;  
        min++;
        n3++;
      }   
 
      //--------------------------------------------------------------5-----  
      Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
      if(Handle==-1)                      // Неудача при открытии файла
        {
          Alert("Ошибка при открытии файла.Возможно, файл занят другим приложением");// Сообщение об ошибке 
          return;                          // Выход из start()      
        }
      //--------------------------------------------------------------- 6 --
      for(int j=0; j<200; j++)             // Цикл по всему массиву
        {
          Qnt_Symb=FileWrite(Handle,Erray_max_min[j,0],Erray_max_min[j,1]);//Запись в файл
          if(Qnt_Symb < 0)                 // Если не получилось
            {
              Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              FileClose( Handle );          // Закрываем файл
              return;                       // Выход из start()      
            }
        }
      //--------------------------------------------------------------- 7 --
      FileClose( Handle );                // Закрываем файл
      Alert("Файл ",File_Name," создан.");// Сообщение
   }     
return;        
}
//--------------------------------------------------------------------------------------------------------------------------------------
 
Если всё правильно сделал, то такие результаты получились

ноль повторился 1 050 281 раз
Теперь буду думать что с этим делать и можно ли что то с этим сделать ))
 
Vitya >>:

Вообще имелось в виду как-то так

      int Erray_max_min [];                  // Массив на n

      ....

      ArrayResize(Erray_max_min,max-min+1);
      for( i=0;i<n;i++)
          { 
            Erray_max_min[Volume[1+i]-Volume[2+i]-min] += 1;  

          }
 
Но главное в первом блине, что он свой :)
 
Candid >>:

Вообще имелось в виду как-то так

Но главное в первом блине, что он свой :)

но если бы не ваша идея я бы до сих пор ещё ждал пока первый вариан посчитает

 
Нулей как-то многовато, надо бы проверить ещё раз