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;

}

}

}

}

}

}

相关推荐
传奇开心果编程2 小时前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
GreenTea6 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20026 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
土司大王7 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹7 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
言乐67 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
土司大王7 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
金金计较.7 小时前
Go语言-3
java·开发语言·golang
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质