收藏 分享(赏)

2霍尔快速排序图示.ppt

上传人:ysd1539 文档编号:6899125 上传时间:2019-04-26 格式:PPT 页数:20 大小:239KB
下载 相关 举报
2霍尔快速排序图示.ppt_第1页
第1页 / 共20页
2霍尔快速排序图示.ppt_第2页
第2页 / 共20页
2霍尔快速排序图示.ppt_第3页
第3页 / 共20页
2霍尔快速排序图示.ppt_第4页
第4页 / 共20页
2霍尔快速排序图示.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、枢轴 49 49 38 65 97 76 13 27 49 比右,2.霍尔快速排序图示,27 38 65 97 76 13 27 49 比左,i,27 38 65 97 76 13 65 49 比右,第一趟:,枢轴 49 27 38 13 97 76 13 65 49 比左,2.霍尔快速排序图示,第一趟结果: 27 38 13 49 76 97 65 49 ,27 38 13 97 76 97 65 49 比右,j,i,小于49,大于等于49,第一趟:,对于左子表,枢轴是 27 27 38 13 先比较右端 13 38 13 比较左端 13 38 38 指针相碰 13 27 38 本趟结束,第

2、一趟结果 27 38 13 49 76 97 65 49,j,i,i,i,j,j,右子表枢轴 76 97 65 49 49 97 65 49 49 97 65 97 49 65 65 97 指针相碰枢轴到位 49 65 76 97 ,新的结果 13 27 38 49 76 97 65 49 ,j,j,j,j,i,i,i,i,76,本趟枢轴是 49 49 6549 65,新结果 13 27 38 49 49 65 76 97 ,结果 13 27 38 49 49 65 76 97,i,i,j,j,3 . 算法实现:,(1)将一个表分成两个子表的过程;返回值是枢轴i int hoarepass(l

3、isttp r, int low, int high) /* low 、 high 分别是表头、尾指针 */; return( i ); /* i 为枢轴位置 */ /* hoarepass */左子表 右子表: rs.ri-1 rs ri+1.rt,int hoarepass(listtp r, int low, int high) /* low 、 high 分别是表头、尾指针 */x=rlow; i=low; j=high;while (i=x.key) j- -;ri=rj; /* 较小值移到左端 */while (ij /* hoarepass */,(2)快速排序主体算法,void

4、 hoare_sort(listtp r) /* sa是一个栈 int saMAX2; 存放右子表头、尾位置 */top=0; low=1; high=n; bool=0;do while (lowhigh) k=hoarepass(r, low,high); /* k为枢轴位置*/top+; satop0=k+1; /* 右表头 */satop1:=high ; /* 右表尾 */ /*左表头不变为low * / high=k-1; /*左表尾*/;if ( top=0) bool=1;else low=satop0; high=satop1; top- -; while (bool=0);

5、 /* hoare_sort */ 递归算法见 P276 算法10.7,4.算法分析:,(1)所用辅助空间: 一个记录+一个栈, 特殊情况下,栈最大深度为 n。 一般情况下: log2n 为栈的深。 (2)比较次数: 一般情况下: T(n)=0(n*log2n) 其中log2n代表栈的深,n反应每个子表比较次数的数量级。 最坏情况( 原表有序时): 0(n2)注意:枢轴位置选法不唯一。,数据结构课件,内部排序 第二讲 2004年12月,上一讲内容回顾,插入排序直接插入排序 稳定 T(n)=O(n2) 交换排序 起泡排序 稳定 T(n)=O(n2)原表有序时 T(n)=O(n) 快速排序 不稳定

6、 O( n.log2n)原表有序时 T(n)=O(n2),本讲内容,选择排序 简单选择排序 稳定 T(n)=O(n2)堆排序 不稳定 T (n)= O( n.log2n)归并排序 两路归并排序 稳定 T (n)= O( n.log2n),9.4 选择排序,一、简单选择排序: 思路:组织外循环(趟) i=1, n-1每趟:从ri,ri+1,.,rn 选关键字最小值的记录放ri ; 算法分析,时间复杂度:T(n)=O(n2) 排序稳定,一、简单选择排序算法,void smp_selecpsort(listtp r) for ( i=1; i=n-1 ; i+) k=i; /* 记下较小值的下标 *

7、/for ( j=i+1; j=n; j+)if ( rj.keyrk.key) k=j;if ( k!=i )x=rk; rk=ri; ri=x; /* smp _selecpsort */,二、堆排序:,1. 堆的概念:n个元素序列k1,k2,.,kn,当且仅当满足:ki=k2i (i=1,2,. , n/2 )ki=k2i+1,关键字: 12 19 65 38 27 73下标 i : 1 2 3 4 5 6,ri,r2i,r2i+1,把它对应的一维数组如果看成完全二叉树, 结点编号的关系与性质5相符合。则 r2i 是 ri 的左孩子;r2i+1 是 ri 的右孩子;,“树”中非终端结点的

8、值均不大于左右孩子的值,关键字:12 19 65 38 27 73 下标 i : 1 2 3 4 5 6,12,19,65,38,27,例如:,是堆(小顶),73,再如 关键字:12 19 65 38 27 36 下标i: 1 2 3 4 5 6,12,19,65,38,27,73,是堆,36,不, 12 19 27 11 20 12 19 65 38 27 73,12 1219 27 19 6511 20 38 27 73,堆的判断练习,非 堆 是 堆,2 . 堆排序:,(1)初建堆 将原始数据序列,调整成堆关系; 堆顶元素是最小值(小顶堆),(2)不断输出堆顶元素;将堆尾元素移至堆顶,再调整成堆。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑环境 > 建筑资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报