给定一个含 NN 个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要 N−1N−1 次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要( )次比较操作。(⌈⌉⌈⌉ 表示向上取整,⌊⌋⌊⌋表示向下取整)。
A. 2N−22N−2
B. 2N−42N−4
C. ⌊3N/2⌋−2⌊3N/2⌋−2
D. ⌈3N/2⌉−2⌈3N/2⌉−2
在NN 个不相同数字的数组同时查找最大值与最小值的算法思想如下:
对NN个数字两两比较,再将较大的数字与最大值打擂台,较小的数字与最小值打擂台。 最坏情况下的算法时间复杂度:
当NN是奇数时,⌈N/2⌉×3⌈N/2⌉×3 。将第一个数赋值给最大值和最小值。然后将剩下N−1N−1个整数两两一组,共(N−1)/2(N−1)/2组,每组组内比较一次,与最大值比较一次,与最小值比较一次,共三次。总比较次数:3×(N−1)/23×(N−1)/2。
当NN是偶数时,将前两个数比较一次,将较大数赋值给最大值、较小数赋值给最小值。然后将剩下的N−2N−2个数两两一组,共(N−2)/2(N−2)/2组,每组组内比较一次,与最大值比较一次,与最小值比较一次,共三次。总比较次数3×(N−2)/2+13×(N−2)/2+1。
本题可以将尝试用N=3N=3排除选项C,答案:D。