
using System;
namespace Legalsoft.Truffer
{
public class Indexx
{
public int n { get; set; } = 0;
public int\[\] indx;
public Indexx()
{
}
public Indexx(double\[\] arr)
{
index(arr, arr.Length);
}
public void sort(double\[\] brr)
{
if (brr.Length != n)
{
throw new Exception("bad size in Index sort");
}
double\[\] tmp = Globals.CopyFrom(brr);
for (int j = 0; j < n; j++)
{
brrj = tmpindx\[j];
}
}
public void sort(int\[\] brr)
{
if (brr.Length != n)
{
throw new Exception("bad size in Index sort");
}
int\[\] tmp = Globals.CopyFrom(brr);
for (int j = 0; j < n; j++)
{
brrj = tmpindx\[j];
}
}
public double el(double\[\] brr, int j)
{
return brrindx\[j];
}
public int el(int\[\] brr, int j)
{
return brrindx\[j];
}
public void setEl(int\[\] brr, int j, int v)
{
brrindx\[j] = v;
}
public void setEl(double\[\] brr, int j, double v)
{
brrindx\[j] = v;
}
public void rank(int\[\] irank)
{
irank = new intn;
for (int j = 0; j < n; j++)
{
irankindx\[j] = j;
}
}
public void index(double\[\] arr, int nn)
{
const int M = 7;
const int NSTACK = 64;
int jstack = -1;
int\[\] istack = new intNSTACK;
n = nn;
indx = new intn;
int ir = n - 1;
for (int j = 0; j < n; j++)
{
indxj = j;
}
int l = 0;
for (; ; )
{
if (ir - l < M)
{
for (int j = l + 1; j <= ir; j++)
{
int indxt = indxj;
double a = arrindxt;
int i = j - 1;
for (; i >= l; i--)
{
if (arrindx\[i] <= a)
{
break;
}
indxi + 1 = indxi;
}
indxi + 1 = indxt;
}
if (jstack < 0)
{
break;
}
ir = istackjstack--;
l = istackjstack--;
}
else
{
int k = (l + ir) >> 1;
Globals.SWAP(ref indxk, ref indxl + 1);
if (arrindx\[l] > arrindx\[ir])
{
Globals.SWAP(ref indxl, ref indxir);
}
if (arrindx\[l + 1] > arrindx\[ir])
{
Globals.SWAP(ref indxl + 1, ref indxir);
}
if (arrindx\[l] > arrindx\[l + 1])
{
Globals.SWAP(ref indxl, ref indxl + 1);
}
int i = l + 1;
int j = ir;
int indxt = indxl + 1;
double a = arrindxt;
for (; ; )
{
do
{
i++;
} while (arrindx\[i] < a);
do
{
j--;
} while (arrindx\[j] > a);
if (j < i)
{
break;
}
Globals.SWAP(ref indxi, ref indxj);
}
indxl + 1 = indxj;
indxj = indxt;
jstack += 2;
if (jstack >= NSTACK)
{
throw new Exception("NSTACK too small in index.");
}
if (ir - i + 1 >= j - l)
{
istackjstack = ir;
istackjstack - 1 = i;
ir = j - 1;
}
else
{
istackjstack = j - 1;
istackjstack - 1 = l;
l = i;
}
}
}
}
}
}