查找一组数最大值和最小值

首先想建堆的办法,需要n/2 * 2次比较,至多n/2次交换建立大根堆或者小根堆;假设建立的是大根堆,对叶子节点进行n/2-1次比较的到最小值,比较次数3n/2。这个方法还可以用于得到最大的或者最小的前k个数,只需建堆后进行层次遍历即可。

另一种方法是假设数组的前两个数时最大值和最小值,然后每次从后面的元素中取出两个,这两个中大的跟“最大值”比较,小的跟"最小值"比较,根据比较情况进行交换,这样每组数进行了三次比较,总共比较了n / 2 * 3次,可能交换次数也是 n/2,可见跟建堆的方法复杂度差不多, 也是3n/2,当然具体根据个数的奇数偶数差个一次二次的。

这里有篇文章,关于查找n个数中最大的k个数的,讲的不错,收藏了,感谢原作者。

http://yilee.info/find-the-largest-k-figures-in-the-beauty-of-programming.html

posted @ 2011-08-24 00:12  jialejiahi  阅读(452)  评论(0编辑  收藏  举报