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