【发布时间】:2017-02-05 12:00:53
【问题描述】:
我在 C 语言中有一个高性能、无等待的向量实现,它允许我对数组进行线性索引,但在底层使用多个数组实现。现在我需要对这个向量进行排序。显然我不能使用qsort() 标准函数,因为该数组不是单个内存块。
虽然没有这样实现,但假设一个 60 槽向量被定义为:
struct vector {
int *buckets[4];
};
struct vector v;
v.buckets[0] = calloc(4, sizeof (int));
v.buckets[1] = calloc(8, sizeof (int));
v.buckets[2] = calloc(16, sizeof (int));
v.buckets[3] = calloc(32, sizeof (int));
我有一个简单的内联函数,可以将给定的索引值转换为 0 到 59 范围内的值(例如,getval(8) 将返回 buckets[1][4],getval(9) 将返回 buckets[1][5] 等。
所以,虽然向量可以线性索引,但它不是线性存储。可以调整快速排序来排序这个向量吗?如果没有,我应该看看其他排序算法吗?
【问题讨论】:
-
您需要自己编写使用您的实现的快速排序。 qsort 仅适用于连续数据。
-
是的,我在问题中引用了那个确切的点。我知道我必须编写自己的快速排序,问题是这是否是合适的算法。
-
你能发布你的实现的实际定义和 API 吗?根据细节,某些排序算法可能比其他算法更合适。对于整数数组,基数排序非常有效。