我必须在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数之间。 您是否想要进行不同数量的比较?
答案 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];
}
}