- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1;学习要点:;3;4;5;6;7;8;计算an;10;11;12; 【程序5-3】 可排序表类
template class K,class D
struct E
{ //可排序表中元素的类型
operator K( )const { return key;}
//重载类型转换运算符
//operator是定义运算符重载函数的关键字
K key;
D data;
};;template class T
class SortableList
{ //可排序表类
public:
SortableList(int mSize);
~SortableList();
private:
T *l ;
int maxSize;
int n;
};;分治法所能解决的问题一般具有以下4个特征:;分治法所能解决的问题一般具有以下4个特征:;17;18;19;20;21;22;证明:T(n)=2T(n/2)+2
=2(2T(n/22)+2)+2=22T(n/22)+22+2
……
=2k-1T(n/2k-1)+2k-1+……+22+2
=2k-1T(2k/2k-1)+2k-1+……+22+2
=2k-1T(2)+2k-1+……+22+2
=2k-1+2k-1+……+22+2
=2k-1+2k-2
=n/2+n-2
=3n/2-2
;24;25;;27;28;29;30;课堂练习;;对半搜索的例子:拼写检查器;34;35;36;37;38;39;40;两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);两路合并排序递归算法(例);49;课堂练习;内部排序与外部排序;合并排序主要用于外部排序。;53;C.A.Hoare;55;56;57;58;写出下列序列的一趟分划过程
72,26,57,88,42,80,75,48,60;60;61;【程序5-12】快速排序
templateclass T
void SortableList::QuickSort()
{
QuickSort(0,n-1);
};63;64;65;66;问与答;问与答;问与答;70;71;72;73;74;75;76;77;78;79;80;81;1.设左=A,A中共有17个元素,取前15个元素(剩余2个元素取中时不考虑),分成三组(47、33、53、41、18)、
(26、19、35、49、19)、(22、39、52、12、29)
2.排序一次取中: (18、33、41、47、53)、(19、19、26、35、49)、(12、22、29、39、52)
3.每组排序后找到新的中项集M={26、29、41}
4.二次取中mm=29
5.以29为基准,将A序列分成三部分,(注意是17个元素)
左={18、19、19、26、12、22}
中={29} j=6
右={33、41、47、53、35、49、39、52、45}
j+1=7,找到第7小元素29。
;【程序5-14】 线性时间选择算法
ResultCode SortableListT::Select(T x,int k)
{
if(n=0||kn||k=0) return OutOfBounds;
int j=Select(k,0,n-1,5);
x=l[j];return Success;
}
templateclass T
int SortableListT::Select(int k, int left,int right,int r)
{
int n=right-left+1;
if (n=r){ //问题足够小,直接插入排序 ,求第k小元素
InsertSort(left,right);
return left+k-1;
}
; for (int i=1;i=n/r;i++){
Inse
文档评论(0)