我正在尝试解决如何在C语言中对多维数据(5个维度)进行排序的问题。我知道使用5D数组是一种解决方案,但从阅读其他SO帖子关于这个主题的文章中得知,许多人认为这种方法在审美上令人难以接受,甚至是不道德的,因此会导致无休止的呕吐...所以预先向大家道歉。
本质上,我有一组传入的数据,必须对其应用一系列离散算法。每个算法都有一组变量,我需要计算每个排列下每个算法的效率排名。最终,我需要一个按照表现最佳到最差排序的列表。整个计算是动态的,因此在一组传入的数据上表现最佳的方法可能在另一组数据上并不是表现最佳的...因此我不能消除任何变量,因为它们可能是性能较差的。
这是数据的样子:
dataValue[ algo ][ lengthVar ][ durationVar ][ plasticityVar ] [ fungibilityVar]
以下是内容:
- 35个算法
- 10种长度变量
- 230个持续时间变量
- 27个可塑性变量
- 400个通用性变量
除了按算法排序外,我还希望能够灵活地按照这5个维度中的任意一个进行排序。
这将在一台拥有12个物理/24个逻辑核心、192 GB(不是MB)RAM,并使用VS 2010 C(而非C ++)的计算机上运行。
我认为qsort可能是最有效的排序选项。我在谷歌和Stack Overflow上进行了广泛搜索,但没有找到如何处理此问题的答案。虽然有关于PHP或C#中单维数组、多维数组等的解决方案,但没有针对C语言的......至少我没找到。
qsort
将排序5D数组的问题转化为比较两个4D数组的问题。只要你知道如何根据它们相应的4D子数组来决定哪个算法更好,就可以使用qsort
对数据进行排序。我链接的文档底部有一个小例子,你应该能够根据自己的需要进行调整。 - Sergey KalinichenkodataValue
为dataValue[35][10][230][27][400]
,还是说algorithm
可能有35个值,length
有10个值,duration
有230个值等等? - Skizz