Visitors hit counter dreamweaver
摘要: 问题描述:给定一个有n个数的序列集,求最大值和最小值。 解题思路:首先想到的的做法是首先任意选两个值作为最小值和最大值。然后剩下的n-2个值分别于这两个值进行比较即可。这样总共要 比较2*(n-2)次。有没有更好的做法呢,在算法导论第九章利就给出了这样一种思路:首先任意选两个值作为最小值和最大值。当然,奇数数组和偶数数组有点不同,奇数数组选第一个既是最大值,也是最小值。偶数数组先比较第一对数组,得出最大最小值。然后再将剩下的数分成两两一组,先两两比较,然后把较小的与最小值比较,较大的与最大值比较。剩下的(n-2)/2组中,每一组只需比较3次即可。也就是3*(n-2)/2。比前... 阅读全文
posted @ 2013-06-17 22:05 Jason Damon 阅读(807) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k大的元素,(这里给定的线性集是无序的)。 其实这个问题很简单,直接对线性序列集qsort,再找出第k个即可。但是这样的时间复杂度就是qsort的时间复杂度O(nlogn)。有没有更快的方法呢?看到网上有一种解法是采取了快排的思路,但是稍微坐了些改动,然后时间复杂度能够接近O(n)。因为最近刚刚写了快排的实现,所以在这我就再把这个实现一次吧。 解题思路:与快排不同的是,这里只对划分出来的其中一组进行递归处理。任意选定一个pivotIndex,pivotValue = arr[pivotIndex]。经过一次... 阅读全文
posted @ 2013-06-17 19:55 Jason Damon 阅读(15803) 评论(0) 推荐(0) 编辑