当前位置: 首页 > news >正文

赛罕区城乡建设局网站什么是新媒体运营

赛罕区城乡建设局网站,什么是新媒体运营,wordpress主题module,软件系统开发报价表一、快速排序的介绍 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法#xff0c;其基本思想为#xff1a;任取待排序元素序列中 的某元素作为基准值#xff0c;按照该排序码将待排序集合分割成两子序列#xff0c;左子序列中所有元素均小于基准值#xff0c;…一、快速排序的介绍 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法其基本思想为任取待排序元素序列中 的某元素作为基准值按照该排序码将待排序集合分割成两子序列左子序列中所有元素均小于基准值右 子序列中所有元素均大于基准值然后最左右子序列重复该过程直到所有元素都排列在相应位置上为止。其时间复杂度最优为N*logN,空间复杂度最优为lonN这里就不予证明了过程相当复杂 用一种通俗的话来讲快速排序其实就时设定一个界定值然后分别开始遍历需要排序的元素将小于该界定值和大于该界定值的放在其两侧每次结束都能将该界定值放到其最终正确的位置 二、快速排序的思想 快速排序其思想也是采用了分治的思想将一个大问题转化为若干个小问题然后逐个解决每个小问题最终达到解决问题的目的 三、快速排序的实现 由上面内容可以知道若想实现快速排序则可以先执行单个元素的排序然后再进行递归处理解决整组数据的排序因为快速排序是一种二叉树结构的交换排序所以可以采用递归的方法将其解决 下面来看一下如何实现单趟排序让数据中一个元素位于其最终应处于的位置 单趟排序的实现 注本篇文章例子是以默认排升序若要实现降序仅需要将循环条件改变一下即可 法一霍尔思想 其单趟排序的思想就是假定一个界定值然后左右两边开始遍历若要排升序则左边找到的比界定值大的值就停下右边找到比界定值小的就停下然后交换两者的值当左右两边相遇时就结束循环最后将相遇的位置的值与界定值交换位置即可完成本次界定值的最终位置的实现 //注意因为这是单趟排序保证了界定值处于该数据最终所在的位置所以该函数应返回本次界定值的位置方便下次调用这个函数实现递归调用解决其另外界定值最终的位置 画个图来形象的描述一下该过程是如何实现的吧 代码如下 int Hoare(int* a, int left,int right) {int vali left;while (left right){//若没有leftright这个限制条件那么当从左边开始走的时候其对应的值一直小于a[vali]时则会导致越界问题//注意若选取vali在左边那么从右边先走因为从右边先走才能保证最后相遇的位置一定是小于vali的值因为从右边找//的话是找比val小于或等于的值停下来while (left right a[right] a[vali]){right--;}while (left right a[left] a[vali]){left;}swap(a[left], a[right]);}//因为最后left和right相遇所以只需将a[vali]与二者任意一个交换位置即可swap(a[left], a[vali]);return left; } 注意1该函数的实现需要注意的是必须保证里面的循环条件是leftright因为假设当从左边开始时其后面的值一直小于等于val时则会导致left越界进而导致程序错误 2还需要注意一点的是当选的界定值在左边时那么必须从右边开始遍历因为从右边先走可以保证最终左边相遇右边时其遇到的右边一定是小于val的值因为当最后左边和右边相遇时还需要交换左边或右边的值与val的值若交换的值大于val时交换之后则没有排序成功反之若选的界定值在右边时那么必须从左边开始遍历原理同上 法二挖坑大法 原理如下挖坑大法的原理就是选定一个界定值将其保存起来然后将其位置假设为一个坑然后左右两边分别开始遍历当左边找到比界定值大的值时则将其数据填入坑中坑的位置更新为新填入数据原来的位置当右边位置找到比界定值小的值时也将其数据填入坑中坑的位置更新为新填入数据原来的位置最后当左右相遇时它们相遇一定是在坑中相遇将原来界定值存放到坑中此时界定值与其左右两边数据保持相对有序图像如下 注这里假定坑位为左边第一个数据那么就必须从右边开始先遍历原因与法一相同 代码如下 int hole (int* a, int left, int right) {int hole left;int val a[left];while (left right){//先从右边开始找比val小的值找到后把坑填了然后其位置就成为新的坑位while (left right a[right] val){right--;}a[hole ] a[right];hole right;while (left right a[left] val){left;}a[hole ] a[left];hole left;}a[hole ] val;return left; } 法三双指针 原理定义两个快慢指针当快指针指向的值小于界定值时让慢指针向后走一步然后交换快慢指针对应的值不管如何快指针是都要向后走的只有当快指针的值小于val时慢指针才会向后走一步然后与其值交换最后当快指针走完整个数据循环结束从其思想上面可以看出当快慢指针之间的值都是比界定值大的数据因为只有当指针指向的值小于界定值时慢指针才会向后走并与当前快指针指向的小于界定值的数据与前面的慢指针的值进行交换 图像如下 从图中可以看出fast和slow之间的值都是大于界定值的所以当fast找到比界定值小的数值后进行slow操作然后交换二者位置仍然可以保证 fast和slow之间的值还都是大于界定值 代码如下 int Dpointer(int* a, int left, int right) {int slow left;int fast left 1;int vali left;while (fastright){if (fastslow a[fast] a[vali])//当slow的位置和fast位置相同时就没必要进行交换了{slow;swap(a[fast], a[slow]);}fast;}//注意一定要交换slow当前的值与原vali的值然后将vali的位置重新赋值为slow的位置swap(a[slow], a[vali]);vali slow;return vali; } 以上三种方法都是单趟的排序因为快排是一种二叉树结构的交换排序方法所以要想将所有元素进行排序就可以采用递归的方法进行操作从而完成整组数据的排序 整组数据的排序实现 代码如下 void Qsort(int* a, int left, int right) {//控制当区间不存在时则跳出递归if (left right){return;}/*int vali Hoare(a, left,right);*///int vali hig(a, left,right);int vali Dpointer(a, left, right);Qsort(a, left, vali - 1);Qsort(a, vali1, right); } 当第一个排过序后其第一个界定值就处于其最终存在的位置所以可将界定值左边的元素再次进行一次排序从而找到下一个界定值最终处于的位置直至最后所要排序的区间不存在排序即完成 今日的快排分享到此为止如有小伙伴还有不懂的地方欢迎在评论区留言提问哦
http://www.w-s-a.com/news/538167/

相关文章:

  • 松原企业网站建设设计素材网排名
  • 网站建设是那个行业广东公司排名
  • 制作网站要多少钱seo是如何优化
  • 求个网站2020急急急做金融网站拘留多久
  • 网站后台管理系统怎么进seo网络推广外包公司
  • 中山市 做网站网站建设如何上传文件
  • 网站呢建设公众号制作要求
  • 网站备案证明在自己电脑上做网站
  • 沈阳旅游团购网站建设怎么制作网站搜索窗口
  • 做化学合成的网站有哪些枣庄住房和城乡建设局网站
  • 天猫优惠券网站怎么做的网络连接
  • 保定网站建设多少钱公司网页网站建设+ppt模板下载
  • 用户上传商品网站用什么做建设跳转公积金网站
  • 买程序的网站上海市网站建设公司
  • 南通网站建设排名公司哪家好wordpress网站图片迁移
  • 河南省汝州文明建设门户网站博客网站建设源码
  • 单位建设网站的请示手机移动端网站案例
  • 国内做网站的企业网站结构有哪些类型
  • 南通网站建设制作公司苏州好的网站公司名称
  • 咸阳做网站开发公司哪家好珠海公司制作网站
  • 深圳网站建设好不好医疗网站前置审批
  • 做ic什么网站好安溪网站建设
  • 网站建设 慕课企业文化标语经典
  • 做短视频的网站都有哪些简约 时尚 高端 网站建设
  • 浦口区网站建设售后服务建设一个网站多少钱
  • 做个小网站大概多少钱广州h5网站
  • 360免费建站视频wordpress标签显示图片
  • 创建简易个人网站国外做网站被动收入
  • 轻定制网站建设网页培训哪个机构好
  • 青岛海诚互联做网站好吗计算机软件开发培训机构