示例#1
0
void ShellSort<VAL>::sort(Vector<VAL> & vec) {
  int del = vec.getSize();
  while (del > 1) {
    del = deltaF(del);
    trace("Delta: " << del << endl);
    deltaSort(del,vec);
  };
}
double model::findSquare(const char FUNCTION, const char METHOD, const long KMAX, const double EPS, const bool RAND, const double X0, const double X1, const int RETRYS, const double RATIORETRYS, const double solution){

    /*switch(activeFUNCTION)
    {
    case 'p':
         if(coefNumber <= 1)
           return 0;

    case 'e':
         if(expoBase == 0)
           return 0;
    }*/

    srand((unsigned int)(time(0)));

    double xk_1, xk, x0, x1, delta;
    long k = 0;
    int currentIteration = 0;

    if(RAND == true)
    {
        int r = rand() % 1000;

        x0 = r + solution;

        r = rand() % 100;

        x1 = r - solution;
    }
    else
    {
        x0 = X0;
        x1 = X1;
    }

    // prima iterare nu este vazuta ca fiind un retry
    while(currentIteration <= RETRYS)
    {
        if(METHOD == 'n')
        {
            xk = x0;
            xk_1 = x0;
        }
        else
        {
            xk_1 = x0;
            xk = x1;
        }

        do
        {
            k++;

            delta = deltaF(METHOD, FUNCTION, xk_1, xk, EPS);

            xk_1 = xk;
            xk = xk - delta;

        }while(fabs(delta) >= EPS && k <= KMAX && fabs(delta) <= 100000000);

        // daca am divergenta
        if(fabs(delta) >= EPS){
            currentIteration++;

            x0 = X0 + RATIORETRYS;
            x1 = X1 + RATIORETRYS;
        }
        else break;
    }

    // in xk am memorata solutia cautata
    return xk;
}