Java快排算法(java工程师需要掌握哪些知识)

思路对于给定的数组,从中选一个元素为比较对象,一般选最左或最右的元素,选左边为升序排,选右边反之。数组array[]:最左边:target=5数组下标:i=0,j=9步骤:①从右边遍历数组,把array[j]比5小的放在5的左边,j–;交换位置后i=0,j=7:②从左边遍历数组,把array[i]比5大的放在5的右边,i++;交换位置后i=…

大家好,又见面了,我是你们的朋友全栈君。

思路

对于给定的数组,从中选一个元素为比较对象,一般选最左或最右的元素,选左边为升序排,选右边反之。

数组array[]:
在这里插入图片描述
最左边:target = 5
数组下标:i = 0, j = 9

步骤:

①从右边遍历数组,把array[ j ]比5小的放在5的左边, j–;
交换位置后i = 0,j = 7:

在这里插入图片描述

②从左边遍历数组,把array[ i ]比5大的放在5的右边, i++;
交换位置后i = 5,j = 7:

在这里插入图片描述

③回到①②步骤循环执行:
在这里插入图片描述

循环执行后,比5小的都放在了5的左边,比5大的都放在了5的右边;

④此时5左边和右边部分还是乱序的,这就需要做递归操作,把0 2 3 1 4和 7 8 6 9 部分继续执行述排序步骤。
递归执行后:

在这里插入图片描述

代码示例:

public class _06FastSortExample { 
   
    /** * 左右两个哨兵 * * @param left * @param right 每次都是这个先 */
    public void quicksort(int[] a, int left, int right) { 
   
        int i, j, t, temp;//哨兵i,哨兵j,交换ij用到t,基准数temp
        if (left > right) { 
   //跳出
            return;
        }
        //传过来的参数进行赋值
        temp = a[left];//temp中存储的就是基准数
        i = left;//左边哨兵
        j = right;//右边哨兵
        while (i != j) { 
   
            //顺序很重要,先从右边开始找
            while (a[j] >= temp && i < j) { 
   
                j--;//记录哨兵j位置
            }
            //再从左边找:小于基准数的数
            while (a[i] <= temp && i < j) { 
   
                i++;//记录哨兵i位置
            }
            //交换两个数在数组中的位置
            if (i < j) { 
   
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        //最终将基准数归位 : 就是基准数跟ij相遇位置的数进行交换
        a[left] = a[i];//a[i]给left的位置也就是0,就是基准数
        a[i] = temp;//基准数该a[i]

        quicksort(a, left, i - 1);//继续处理左边的,这里是一个递归的过程
        quicksort(a, i + 1, right);//继续处理右边的 ,这里是一个递归的过程
    }

    public static void main(String[] args) { 
   
        int a[] = { 
   5,2,3,1,6,4,7,8,0,9};//数组//定义变量,这两个变量需要在子函数中使用
        _06FastSortExample f = new _06FastSortExample();
        f.quicksort(a, 0, a.length - 1);
        for (int aa : a) { 
   
            System.out.println(aa);
        }
    }
}

其他算法:

Java二分查找法
Java冒泡排序
Java选择排序
Java插入排序
Java希尔排序
Java计数排序
Java快排算法
Java归并排序
Java堆排序
动图演示

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

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

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


相关推荐

  • yarn一些最佳配置

    yarn一些最佳配置

    2021年11月27日
    56
  • java android实例_Android开发精典案例60个

    java android实例_Android开发精典案例60个【实例简介】Android开发精典案例60个【实例截图】【核心代码】2-1(Activity生命周期)3-1(Button与点击监听器)3-10-1(列表之ArrayAdapter适配)3-10-2(列表之SimpleAdapter适配)3-11(Dialog对话框)3-12-5(Activity跳转与操作)3-12-6(横竖屏切换处理)3-3(ImageButton图片按钮)3-4(EditTe…

    2022年6月17日
    24
  • oSIP开发者手册 oSIP开发者手册

    oSIP开发者手册 oSIP开发者手册摘要“会话发起协议(SessionInitiationProtocol-SIP)是一个应用层的信令控制协议。用于创建、修改和终止一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发(例如:语音信箱)。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。”  ”TheSessionInitiationPro

    2022年6月16日
    21
  • Python安装pymssql「建议收藏」

    Python安装pymssql「建议收藏」Python安装pymssql(v2.1.3)pymssql下载地址:https://pypi.python.org/pypi/pymssql/python2.7×32版本下pymssql的安装:如果使用2.1.1版本:https://pypi.python.org/pypi/pymssql/2.1.1#downloads,下载时选择pymssql-2.1.1.win32-py2.7.exe

    2022年6月15日
    143
  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

    2022年8月11日
    1
  • 《Python爬虫大数据采集与挖掘》期末考试考题汇总带答案

    《Python爬虫大数据采集与挖掘》期末考试考题汇总带答案一、填空题1、爬虫技术的应用可以分为两大类:采集型爬虫、监测型爬虫。2、根据Web页面组成结构中的信息内容的生成方式不同,可以将Web页面分为静态页面、动态页面、以及伪静态页面三大类。3、Robots协议为了给Web网站提供灵活的控制方式来决定页面是否能够被爬虫采集。4、在浏览器中打开网站后,在网站首页的地址后面添加“/robots.txt”,如果网站设置了访问许可,按回车就可以看到网站的robots协议,即robots.txt文件内容。5、Web信..

    2022年6月16日
    36

发表回复

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

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