找到随机排列阵列的平均比较数

时间:2018-03-29 02:14:41

标签: c++ arrays random

我必须在cpp中编写一个函数,它运行大小为M的N 随机置换数组,并返回找到最小值和最大值的 avg比较次数这些数组的元素。 我想我应该使用这样的算法,找到每个数组的最小值和最大值:

MaxMin(A)
Max=Min=A[1]
for i <-1 to Length(A)
    if A[i] < Min
        Min <- A[i]
    else if A[i] > Max
        Max <- A[i]

但是,生成具有一定大小的随机排列数组的方法是什么? (我知道如何生成随机数组)

我还想问一下找到平均最小值和最大值的平均值之间有什么区别?#34;通常&#34;随机数组,在排列随机数组的情况下的ovg数之间。 您是否想要进行不同数量的比较?

1 个答案:

答案 0 :(得分:1)

查找数组最小元素的算法可能如下所示:

int min = array[0];
for(int i = 1; i < size; i++)
{
    if(array[i] < min) //Note that this is a comparison no matter if min
    {                  //needs to be updated or not
        min = array[i];
    }
}

此代码使用min来存储我们看到的当前最小元素,将除第一个元素之外的每个元素与进行比较,并在必要时更新min

请注意,每次迭代都会进行比较,总是size - 1次。

还是不相信?编写一个简短函数来进行比较并递增一个全局计数器,在循环中使用它来代替<运算符:

int counter = 0;
bool isless(int a, int b) { counter++; return a < b; }
int min = array[0];
for(int i = 1; i < size; i++)
{
    if(isless(array[i], min))
    {
        min = array[i];
    }
}