微软--编程之美-2.10
1、题目:对于一个由N个整数组成的数组,需要比较多少次才能把最大和最小的数找出来?
2、解题思路
2.1、解法一
最直接的做法就是先扫描一遍数组,找出最大的数以及最小的数,一个需要比较2*N次才能求解。
时间复杂度:O(2N)
2.2、解法二
一般情况下,最大的数和最小的数不会是同一个数(除非N=1,或者所有整数都是一样的大小)。所以,我们可以先把数组分成两部分,然后再从这两部分中分别找到最大值和最小值。
首先,按顺序将数组中相邻的两个数分在同一组(概念上的分组),若数组为{5,6,8,3,7,9},如图1所示,
接着比较同一组中奇数位数字和偶数位数字,将较大的数放在偶数位上,较小的数放在奇数位上。经过N/2次比较后,较大的数放到了偶数位置上,较小的数就放到了奇数位置上。