正在加载图片...
士 72三种O(m2)的简单排序 7.21插入排序 插入排序( Insert Sort) 算法思想 ■冒泡排序( Bubble sort) 算法演示 选择排序( Selection sort) ■直接插入排序 ■优化的插入排序 带监视哨的插入排序 ■二分法插入排序 举位▲张倍墙写 北大单张铭写 叔新有,命邮 45‖ template <class Record, class Compare> =134.4578123432296 wpid StraightInsertSorter<Record, Compare> 4 ‖1234322964 /Aray[]为待排序数组,n为数组长度 i=312344578|332296 for(inti=1;i<ni++)∥/依次插入第个记录 ∥/依次与前面的记录进行比较,发现逆置就交换 for (int j=i;j>O;j--)t i=412342.4578‖322964 if (Compare: : lt(Array D], Array[-1]) =5123234344578‖2964 else break;//此时前面记录已排序 i=7122932343445478‖ 大张帖写 叔新有,量究 算法分析 优化的插入排序算法 稳定 uplate <class Record, class 空间代价:e(1) Compare> 时间代价: class ImprovedInsertsorter: public 最佳情况:n-1次比较,0次交换,e(n) Insertsorter<Record, Compare> 最差情况:比较和交换次数为 //优化的插入排序类 ∑i=n(n-1)/2=6(2) void Sort(Record Array lint n; 平均情况:e(n2) 北真大学张铭编写 聊张帖写 权新有,究4 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 19 7.2 三种O(n2)的简单排序 „ 插入排序(Insert Sort) „ 冒泡排序(Bubble Sort) „ 选择排序(Selection Sort) 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 20 7.2.1 插入排序 „ 算法思想 „ 算法演示 „ 直接插入排序 „ 优化的插入排序 „ 带监视哨的插入排序 „ 二分法插入排序 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 21 45‖ 34 78 12 3 4 32 29 64 i=1 34 45‖ 78 12 3 4 32 29 64 i=2 34 45 78‖ 12 3 4 32 29 64 i=3 12 34 45 78‖ 3 4 32 29 64 i=4 12 34 3 4 45 78‖ 32 29 64 i=5 12 32 34 3 4 45 78‖ 29 64 i=6 12 29 32 34 3 4 45 78‖ 64 i=7 12 29 32 34 3 4 45 64 78‖ 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 22 template <class Record,class Compare> void StraightInsertSorter<Record,Compare>:: Sort(Record Array[], int n) { //Array[]为待排序数组,n为数组长度 for (int i=1; i<n; i++) // 依次插入第i个记录 { //依次与前面的记录进行比较,发现逆置就交换 for (int j=i;j>0;j--) { if (Compare::lt(Array[j], Array[j-1])) swap(Array, j, j-1); else break; //此时i前面记录已排序 } } } 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 23 算法分析 „ 稳定 „ 空间代价:Θ(1) „ 时间代价: „ 最佳情况:n-1次比较,0次交换,Θ(n) „ 最差情况:比较和交换次数为 „ 平均情况:Θ(n2) 1 2 1 ( 1) / 2 ( ) n i i nn n − = ∑ = − =Θ 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 24 优化的插入排序算法 template <class Record,class Compare> class ImprovedInsertSorter:public InsertSorter<Record,Compare> { //优化的插入排序类 public: void Sort(Record Array[],int n); };
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有