环境:我正在使用一种专有的脚本语言,其中不存在用户定义函数之类的东西。我有可以创建和使用的各种循环和原始类型的局部变量。
我有两个相关的数组,“times”和“values”。它们都包含浮点值。我想对“times”数组进行数字排序,但必须确保对“values”数组应用相同的操作。在没有递归之类的好处的情况下,最有效的方法是什么?
最佳答案
您可以维护一个索引表并对索引表进行排序。
这样您就不必担心时间和值是否一致。
每当您需要排序值时,您都可以在排序索引上查找。
如果将来您决定有第三个值,则排序代码将不需要任何更改。
这是一个 C# 示例,但适应您的脚本语言应该不难:
static void Main() {
var r = new Random();
// initialize random data
var index = new int[10]; // the index table
var times = new double[10]; // times
var values = new double[10]; // values
for (int i = 0; i < 10; i++) {
index[i] = i;
times[i] = r.NextDouble();
values[i] = r.NextDouble();
}
// a naive bubble sort
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
// compare time value at current index
if (times[index[i]] < times[index[j]]) {
// swap index value (times and values remain unchanged)
var temp = index[i];
index[i] = index[j];
index[j] = temp;
}
// check if the result is correct
for (int i = 0; i < 10; i++)
Console.WriteLine(times[index[i]]);
Console.ReadKey();
}
注意:我在那里使用了一个简单的冒泡排序,请注意。就您而言,插入排序可能是一个不错的选择。因为您不需要复杂的递归。
关于algorithm - 使用受限功能语言对并行数组进行排序的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455712/