分享好友 资讯首页 资讯分类 切换频道
快速排序之——Hoare方法一实现
2024-12-24 10:24  浏览:79

        快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程(递归),直到所有元素都排列在相应位置上为止。

        在动态图中,key称为基准值,默认把基准值定义在数组的首元素上,其次为了加快遍历的速度,需要用到两个变量分别去对应数组的首尾部分,L处在数列的首部,它需要从左往右寻找比Keyi位置的值大的,遇到后就停下来,没遇到就一直走;R处在数列的尾部,它需要从右往左去寻找比keyi位置的值小的,也是遇到后就停下来,没遇到就一直走。

        当L与R都遇到停下来后开始互换位置,然后继续遍历,直到L==R时,双方都不会再走了,因为它们走到了同一个位置,这个位置被称为它俩的相遇点,之后便需要将keyi位置的值与相遇点的值互换位置,这样keyi位置的值就放到了中间,成为了数组的中心——基准值,它意味着将数组分为两个子序列,左序列全是小于Keyi的值,右序列全是大于Keyi的值,这样便可以利用递归,一层一层再对左右两个子序列进行相同的步骤——将一个大的无序序列转化为多个小的序列,从而进行排序,最终排列为完全有序的序列。

 

 

        

方法1:Hoare版本——快排递归

        首先就是通过遍历将Key位置的值换到数组序列的中间部分,然后以Key为基准值,将序列递归分割,该方法的图解就像二叉树一样,所用的时间杂度为O(N*logN),递归的层度为logN层。

 

        这种快排方法对于无序杂乱的序列来说,效率非常高,而对于接近有序和完全有序的数组序列,使用它效率就很低,它的时间复杂度会从O(N*logN)退化到O(N^2),快排的效率就相当于冒泡排序,所以需要对Hoare方法进行相应的优化,使得快排对于任何类型的序列都能达到极高的效率

        

        三数取中的思路当我们知道数组的首部元素和尾部元素后,便可求出这个序列中间位置的数,我们只需要在首中尾这三个数中,挑出一个不是最大,也不是最小的中值,进行快速排序,便可加快提高快速排序效率。

        为什么要取中值?假设待待排序的数列是一组高度有序的数列,显然数列首部很可能是极小值,数组的尾部是极大值,若选取一个排在中间的值,即使在最坏的情况下,right从右往左走,left从左往右走,right与left只需要走到中间位置便可以相遇,而这个数也正好是整个序列的均值。大大提高了快排效率。使用三数取中法消除了预排输入不好的情况,并且减少了快排大约14%的比较次数。

 

        

        小区间优化主要是针对快速排序的递归版本,其思想是如果某一趟区间的长度小于某一长度则不需要继续进行递归快排,而是使用其他排序将该区间的元素排序好。

 

    以上就是本篇文章【快速排序之——Hoare方法一实现】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/news/2570.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
小花分期统一客服电话-小花分期人工客服服务热线电话
小花分期全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描
悦分期全国客服电话是多少-悦分期强制下款怎么解决
悦分期全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描述
广源优品全国客服电话是多少-广源优品强制下款怎么解决
广源优品全国人工24小时客服电话;00861-52707-22671,二线:00861-78796-93757—请注意,在拨打客服电话时,请保持耐心并详细描
广源优品全国客服电话是多少-广源优品强制下款怎么解决
获取全网一手热点首页新闻无障碍金融街论坛丨持续提升巨灾保险保障水平2024金融街论坛年会观察v新华网2024年10月21日15:25北京新
众享贷全国客服电话是多少-众享贷强制下款怎么解决
获取全网一手热点首页新闻无障碍金融街论坛丨持续提升巨灾保险保障水平2024金融街论坛年会观察v新华网2024年10月21日15:25北京新
来趣花全国客服电话全新升级-来趣花24小时在线客服电话
来趣花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【来趣花:金融创新与普惠金融的双刃剑】在当今快速发展的
米来花全国客服电话全新升级-米来花24小时在线客服电话
米来花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【米来花:金融创新与普惠金融的双刃剑】在当今快速发展的
微米花贝全国客服电话全新升级-微米花贝24小时在线客服电话
微米花贝全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【微米花贝:金融创新与普惠金融的双刃剑】在当今快速发
享趣花呗全国客服电话全新升级-享趣花呗24小时在线客服电话
享趣花呗全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【享趣花呗:金融创新与普惠金融的双刃剑】在当今快速发
鱼享花全国客服电话全新升级-鱼享花24小时在线客服电话
鱼享花全国人工24小时客服电话00861-52971-57932二线00861-56399-67714【鱼享花:金融创新与普惠金融的双刃剑】在当今快速发展的