如何排序是一个数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (44)

假设我们有一个长度为整数的数组n。我们需要像函数f(arr, n)之间返回一个数字-100%+100%。结果越接近+100%,数组越按升序; 结果越接近-100%,数组越多,降序越多。如果数组完全是随机顺序,则结果应该接近0%

这是我到目前为止的实现:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

int f(int arr[], int n) {
    int p = 0;

    for (int i = 0; i < n - 1; i++) {
        int a = arr[i];
        int b = arr[i + 1];

        if (a != b) {
            bool asc_check = a < b;
            bool desc_check = a > b;

            if (asc_check && !desc_check)
                p++;

            else if (!asc_check && desc_check)
                p--;
        }
    }

    return map(p, -(n - 1), n - 1, -100, 100);
}

我怀疑我的代码是否准确。请帮我写出正确的实现。

谢谢!

提问于
用户回答回答于

扫码关注云+社区

领取腾讯云代金券