交换排序之高速排序[通俗易懂]

交换排序之高速排序

大家好,又见面了,我是全栈君。

今天大鹏哥跟大家一起学习下交换排序中的高速排序。

高速排序是对冒泡排序的一种改进。它的基本思想是。通过一趟排序将待排记录切割成独立的两部分,当中一部分记录的keyword均比还有一部分的keyword小。则可分别对这两部分记录继续进行排序,以达到真个序列有序。

高速排序基本步骤:

         Step1、定义两个变量low和high,他们的初值分别为low和high,此外另一个变量pivotkey。

         Step2、首先从high所指位置向前搜索找到第一个keyword小于pivotkey的记录和pivotkey交换。

         Step3、从low所指位置向后搜索。找到第一个keyword大鱼pivotkey的记录和pivotkey交换。

         Step4、反复以上步骤直到low=high为止。

 

待排序列:49   38   65   97   76   13   27  49

1、附设low和high以及设枢轴记录的keyword为pivotkey:

                    49   38   65   97  76   13   27   49

                     ↑(low)                               ↑(high)

                    ↑(pivotkey)

2、从high所指位置向前搜索,找到第一个小于pivotkey的记录(此处为27)和枢轴记录互相交换:

                    27   38   65   97  76   13   49   49

                     ↑(low)                               ↑(high)

                                                            ↑(pivotkey)

3、从low所指位置向后搜索,找到第一个大于pivotkey的记录(此处为65)和枢轴记录互相交换:

                   27   38   49  97   76   13   65   49

                              ↑(low)              ↑(high)

                              ↑(pivotkey)

4、反复2、3步直至low=high为止。

                 27   38   13   97  76   49   65   49

                           ↑(low)         ↑(high)

                                            ↑(pivotkey)

                27   38   13   49  76   97   65   49

                                ↑(low) ↑(high)

                                ↑(pivotkey)

                 27   38   13   49  76   97   65   49

                                ↑(low=high)

                                ↑(pivotkey)

上面给出的是一趟快排过程,整个快排过程可递归进行,上述操作完毕后,再分别对两个子序列进行高速排序。

Java实现例如以下:

        

public class QuickSort {

 

    public static void main(String[] args) {

       // TODO Auto-generatedmethod stub

       int[] a={49,38,65,97,76,13,27,49};

       int pivotloc,low=0,high=a.length-1;

       System.out.print(排序前:”);

       for(int x:a){

           System.out.print(x+“,”);

       }

       if(low<high){

           pivotloc = quickSort(a,low,high);

           quickSort(a,low,pivotloc-1);

           quickSort(a,pivotloc+1,high);

       }

       System.out.print(排序后:”);

       for(int x:a){

           System.out.print(x+“,”);

       }

    }

 

    private static int quickSort(int[] a, int low, int high) {

       int pivotkey=a[low];

       while(low<high){

           while(low<high&&a[high]>=pivotkey)

              high–;

           a[low]=a[high];

           while(low<high&&a[low]<=pivotkey)

              low++;

           a[high]=a[low];

       }

       a[low]=pivotkey;

       return low;

    }

 

}

高速排序的时间复杂度为O(NlogN)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116541.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos 6.5 p2v virt-p2v过程详解之一

    centos 6.5 p2v virt-p2v过程详解之一在此就不写关于那些概念和定义了,直接就写出过程一、安装kvmKVM需要有CPU的支持(Intelvmx或AMDsvm),在安装KVM之前检查一下CPU是否提供了虚拟技术的支持:#egrep’^flags.*(vmx|svm)’/proc/cpuinfo有显示,有显示则说明处理器具有VT功能,在主板BIOS中开启CPU的VirtualTechnoleg

    2022年7月26日
    11
  • 如何保证docker2375端口的安全

    如何保证docker2375端口的安全情景再现:之前有很多朋友提过,当使用docker-maven-plugin打包SpringBoot应用的Docker镜像时,服务器需要开放2375端口。由于开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,今天我们来聊聊如何解决这个问题。问题产生的原因首先我们要明白问题产生的原因,才能更好地解决问题!Docker为了实现集群管理,提供了远程管理的端口。DockerDaemon作为守护进程运行在后台,可以执行发送到管理端口上的Docker命令。当我们修改do

    2022年6月13日
    48
  • 浏览器被hao360劫持解决办法

    浏览器被hao360劫持解决办法浏览器被hao360劫持怎么办chromeedge被hao360劫持解决办法建议chromeedge被hao360劫持chrome和edge被hao360劫持后的样子解决办法在该目录下C:\ProgramData\Microsoft\Windows\StartMenu\Programs删除被hao360修改快捷方式(edge为例chrome我已删除了)最后浏览器回复正常。建议安装软件到对应官网下载正规软件安装…

    2022年7月26日
    23
  • Windows10下安装linux(Utunbu)双系统「建议收藏」

    Windows10下安装linux(Utunbu)双系统「建议收藏」电脑的硬盘应该是mbr模式1.正常安装windows10系统2.打开windows10系统,安装EaSYCBD2.243.右键系统菜单,打开磁盘管理选择一个硬盘压缩100g(自己定义,不少于50G)。4.打开电源选项,关闭快速启动5.插入Untunbu启动盘,重启进入BIOS,关闭SecureBOOT,并以USB为第一启动项6.进入Untunbu,选择installUtunbu,不要联网,然后选择挂载点。10-20G的“/”,主区,etx4;200MB的“/boot”逻辑分区,etx

    2022年7月24日
    8
  • idea2021.2.2激活码永久-激活码分享[通俗易懂]

    (idea2021.2.2激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSW…

    2022年3月27日
    3.0K
  • 高通QXDM_log工具怎么使用

    高通QXDM_log工具怎么使用https://blog.csdn.net/u010164190/article/details/79913808

    2022年9月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号