C#,数值计算——索引类(Index)的计算方法与源程序

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;

}

}

}

}

}

}

相关推荐
江畔柳前堤35 分钟前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
Wang's Blog1 小时前
Go-Zero 项目开发47:自研微服务框架的必要性与核心结构设计
开发语言·微服务·golang
白鸽(二般)2 小时前
MinIO Java Client API
java·开发语言
hPw0eKIqD2 小时前
C++ 模板参数推导问题小记(非推导上下文)
开发语言·c++
临床数据科学和人工智能兴趣组2 小时前
要使用 R Markdown,首先需要安装 R 和 RStudio,接着安装 rmarkdown 包
开发语言·数据挖掘·数据分析·r语言·r语言-4.2.1
普通攻击往后拉2 小时前
Leetcode 206. 反转链表
算法·leetcode·链表
Nebula嵌入式3 小时前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式
@syh.3 小时前
【贪心】矩阵消除游戏
算法·游戏·矩阵
可编程芯片开发3 小时前
基于零极点配置的PID控制系统simulink建模与仿真
算法