首页 > 试题广场 >

在一个有8个int数据的数组中,随机给出数组的数据,找出最大

[不定项选择题]
在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行几次比较(     )
  • 8
  • 9
  • 10
  • 11
将8个数据俩俩分组比较,需要7次得到最大元素,假设为E,那么第二大元素的取值范围为图中的黄色部分,需要2次比较得出,所以一共是9次。

发表于 2019-11-27 15:37:31 回复(14)
第一次分组8个分成4组 两两一组 比4次 第二次分组为上面比较下来的4个还是两两分组 分2组 第三次分组就剩下两个直接比较出了最大 这时一共比较了4+2+1=7次 接着拿第三次分组中与最大比较的那个数分别和 之前与最大那个数比较过的数比较 分别是第一次分组有一个 第二次分组有一个 7+2=9
发表于 2019-09-03 00:51:39 回复(3)
首先比较得到最大数值:
step1:8个数字,分为4组比较,分别得到4个较大数值,比较4次
step2:4个数字,分为2组比较,分别得到2个较大数值,比较2次
step3:2个数字,互相比较,得到最大数值,比较1次
然后用step1比较结果的剩下的3个数字互相比较,例如剩下三个数字为a、b、c,a与b比较得到较大数字再与c比较,比较2次,得到第二大数值
综上,共比较4+2+1+2=9次
发表于 2022-05-30 16:57:13 回复(5)
所以单选题为什么是多选题
发表于 2022-03-16 14:08:27 回复(2)
找到一个最大值:需要比较 n - 1 次
找到一个最大一个次大值:需要比较 n + log2(n)- 2 次
编辑于 2022-07-16 14:03:03 回复(0)
这特喵是个多选题,然后答案只有一个。。。考公务员呢?
发表于 2022-08-02 17:18:29 回复(0)
个人认为这种写法不就是8次比较吗?
#include <iostream>
#include <vector>
#include <random>

template<typename T>
std::ostream& operator<< (std::ostream& out, const std::vector<T>& v)
{
	for (const auto& elem : v) {
		out << elem << " ";
	}
	return out;
}

int main()
{
	std::default_random_engine engin;
	std::uniform_int_distribution<int> rand(1, 100);
	engin.seed(std::time(0));

	std::vector<int> v(8);
	for (auto& num : v) {
		num = rand(engin);
	}

	std::cout << v << std::endl;

	int mx1 = 0, mx2 = 0;
	for (auto num : v) {
		if (num > mx1) {
			mx2 = mx1;
			mx1 = num;
		}
		else if (num > mx2) {
			mx2 = num;
		}
	}

	std::cout << mx1 << " " << mx2 << std::endl;
	return 0;
}

/*
1 2 3 4 5 6 7 8


*/


发表于 2022-07-03 20:59:35 回复(1)
败者树么
发表于 2022-04-28 11:28:02 回复(0)
<p>构建大顶推。使用大顶推的时间复杂度考虑。</p>
发表于 2020-04-27 00:31:38 回复(0)
个人认为在这种条件下,最少只需要8次
int a=INT32_MIN,b;
for(int i=0;i<8;i++)
{
    if(arr[i]>=a)
    {
        b=a;
        a=arr[i];
    }
}


编辑于 2020-01-17 19:27:26 回复(6)
啊 这是多选题,答案只有一个???

发表于 2023-08-17 08:26:00 回复(0)
多选题给我单选选项,我单选又不让我确定
发表于 2022-10-14 11:21:00 回复(0)
用两个变量存 一个存一大 一个存二大 明明7次就可以了 这题有问题
发表于 2022-10-10 12:46:46 回复(3)
建立大根堆,最坏情况9次能选出。
发表于 2022-03-14 10:28:57 回复(0)
倒叉树
发表于 2023-11-09 22:46:14 回复(0)
我还是不太明白 我想就算是最差的情况也只需要比七次就好了?比如12345678,最开始以第一个数1为基准,依次跟后面的数比较,遇到比它更大的数基准就变成这个数,最后只会剩下第二大的数根最大的数比不是么🧐
发表于 2023-10-11 23:45:31 回复(0)
个人理解:
                    求最大值:分四组:+4
                                      分两组:+2
                                       分一组:+1    --得到最大值和不确定的第二大值
                  求第二大值:回溯到最大值在分4组前被淘汰的小值和不确定的第二大值比较:+1
                                         回溯到最大值分两组前的中淘汰的小值和不确定的第二大值比较:+1
                    总次数为:4+2+1+1+1=9
所以选9次

编辑于 2023-05-24 20:20:09 回复(0)
最优的情况只需要比较7次就可以得到最大和第二大了吧,


int a[8] = { 4, 2, 8,6,7,3,5,1 };
    int count = 0;//统计比较次数
    int s_max, max;//s_max第二大数值,max最大值
    if (a[0] < a[1])
    {
        count++;
        s_max = a[0];
        max = a[1];
    }
    else {
        count++;
        s_max = a[1];
        max = a[0];
    }
    for (int i = 2; i < 8; i++)
    {
        if (a[i] > max)
        {
            count++;
            s_max = max;
            max = a[i];
        }
        else if (a[i] > s_max)
        {
            count += 2;
            s_max = a[i];
        }
        else {
            count += 2;
        }
    }

    cout << "最大值为:" << max << endl;
    cout << "第二大值为:" << s_max << endl;
    cout << "比较次数为:" << count << endl;
发表于 2023-05-19 15:13:02 回复(0)
找到一个最大值:需要比较 n - 1 次
找到一个最大一个次大值:需要比较 n + log2(n)- 2 次
发表于 2022-09-01 09:47:39 回复(0)
假如第二大的数字一开始就跟最大的比对被筛掉了呢?
发表于 2022-03-10 08:57:21 回复(0)