Chr*_*mer 2 sorting algorithm scripting
环境:我使用专有的脚本语言,没有用户定义的功能.我有各种循环和基本类型的局部变量,我可以创建和使用.
我有两个相关的数组,"时间"和"值".它们都包含浮点值.我想在数字上对"时间"数组进行排序,但必须确保在"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();
}
Run Code Online (Sandbox Code Playgroud)
注意:我在那里使用了一个天真的泡泡排序.在您的情况下,插入排序可能是一个很好的候选人.因为您不需要复杂的递归.