快速排序 ppt课件.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
快速排序 ppt课件.ppt

快速排序导入 快速排序导入 – 冒泡排序过程 快速排序导入 – 冒泡排序过程 快速排序导入 – 冒泡排序过程 快速排序导入 快速排序导入 – 冒泡排序分析 对所有记录从左到右每相邻的元素进行比较 ,不符合要求则交换 快速排序导入 – 冒泡排序分析 快速排序导入 – 冒泡排序分析 快速排序思想 快速排序思想 快速排序讲解 快速排序讲解 快速排序讲解 快速排序讲解 快速排序讲解 快速排序讲解 快速排序讲解 快速排序完整代码 快速排序完整代码 算法分析 练习题 快速排序 作者:杨劲松 内容提要 快速排序导入 快速排序思想 快速排序讲解 快速排序算法分析 练习题 退出 请同学们使用冒泡排序的方法将下列数据排序:(从小到大) 21 25 49 16 25 06 目录 初始状态 第一次交换结束 目录 第二次交换 第二次交换结束 目录 第三次交换结束 第二次交换结束 第四次交换结束 目录 第六次交换结束 第五次交换结束 请同学们说说 冒泡排序是如何工作的 目录 冒泡排序的基本做法: 思考:在数据为以下排列时,冒泡的排序效果好不好? 49 25 25 21 16 06 初始状态是反序的,则需要进行n-1趟扫描 目录 从直观上49移动到最终的位置经过了n-1次比较和交换 49 25 25 21 16 06 06 16 21 25 25 49 能不能不经过n-1次比较和交换呢? 不能?这是由于冒泡排序中需要相邻的元素两两比较、交换 目录 基本思想: 1)寻找一个中心元素(通常为第一个数) 2)将小于中心点的元素移动至中心点之前,大于中心点的元素移动至中心点之后。 3)对上步分成的两个无序数组段重复1)、2)操作直到段长为1。 t <t >=t 目录 以21为中心元素 划分可得: 以06、49为中心元素 划分可得: 目录 选取中心元素的问题 选取第一个数为中心元素 如何划分问题 如何重复步骤①②将所有数据排序 使用递归 目录 当已知中心元素的前提下,怎样将其他元素划分好?(即:大于中心点在之后,小于中心点在之前) 需要解决的问题 i [0] [1] [2] [3] [4] [5] i=0 i=1 j=5 j=5 j i=1 j=3 i=1 j=4 i=2 j=3 i=2 j=2 算法终止 目录 请同学们思考 该算法有没有可以改进的地方 目录 i [0] [1] [2] [3] [4] [5] i=0 i=1 j=5 j=5 j i=1 j=3 i=1 j=4 i=2 j=3 i=2 j=2 算法终止 通过动画,可以看出每次中心元素都要交换。根据划分的思想最后位置一定是中心元素 可以申请一个变量保存中心元素,以避免交换 目录 i=left;j=right;int temp=a[left]; do { //从右向左找第1个不小于中心元素的位置j while( a[j] > temp && i<j) j--; if(i<j) { a[ I ] = a[ j ]; i++; } a[i]=temp; left,right用于限定要排序数列的范围,temp即为中心元素 程序填空 当前元素小于中心元素结束循环时,应当在中心元素的左边 移至左边 目录 //从左向右找第1个不大于中心元素的位置i while(a[i]<temp && i<j ) i++; if(i<j) { a[j]=a[i]; j--; } }while(i<j); a[i]=temp; //将中心元素t填入最终位置 程序填空 目录 函数头:quicksort(int a[],int left,int right) 初始化:i=left;j=right;int temp=a[left]; 划分:do{一次划分} while(i<j); 中心元素填入:a[i]=temp; 递归地对剩余段作快速排序 quicksort(a,left,i-1); quicksort(a,i+1,right); 目录 void quicksort(int a[],int left,int right) { int i,j; if(left<right) { i=left;j=right; int temp=a[left]; do { while(a[j]>temp && i<j) j--; if(i<j) { a[i]=a[j]; i++; } 目录 while(a[i]<temp && i<j) i++; if(i<j) { a[j]=a[i]; j--; } }while(i<j

文档评论(0)

2837587390 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档