《算法设计与分教学资料》第2章.ppt

《算法设计与分教学资料》第2章

划分策略示意图: 白色圆点:每组的中位数 点x:中位数的中位数 比x小的元素 至少3(n-5)/10个 比x大的元素 至少3(n-5)/10个 而当n≥75时,3(n-5)/10≥n/4所以按此基准划分所得的2个子数组的长度都至少缩短1/4。 Type Select(Type a[], int p, int r, int k) { if (r-p75) { 用某个简单排序算法对数组a[p:r]排序; return a[p+k-1]; }; for ( int i = 0; i=(r-p-4)/5; i++ ) 将a[p+5*i]至a[p+5*i+4]的第3小元素 与a[p+i]交换位置; //找中位数的中位数,r-p-4即上面所说的n-5 Type x = Select(a, p, p+(r-p-4)/5, (r-p-4)/10); int i=Partition(a,p,r, x), j=i-p+1; if (k=j) return Select(a,p,i,k); else return Select(a,i+1,r,k-j); } 复杂度分析 T(n)=O(n) 上述算法将每一组的大小定为5

文档评论(0)

1亿VIP精品文档

相关文档