algorithm - 使用受限功能语言对并行数组进行排序的最有效方法

标签 algorithm sorting scripting

环境:我正在使用一种专有的脚本语言,其中不存在用户定义函数之类的东西。我有可以创建和使用的各种循环和原始类型的局部变量。

我有两个相关的数组,“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/

相关文章:

Python有效地创建密度图

algorithm - 无法定义此算法的运行时间

c++ - 数组排序失败

python - 使用 VB 或 python 编写 OpenOffice 表单脚本

bash - shell脚本中的 `kill -0 $pid`有什么作用?

python - 精确的 n 次根

python - 说这个算法是 O(n+m) 正确吗?

sorting - F# ResizeArray sortBy 稳定吗?

C++ std::sort 具有相同的参数

linux - Bash 脚本 : bad interpreter